gpt4 book ai didi

java - TextButton 背景上的 NinePatch 渲染问题 (libgdx)

转载 作者:行者123 更新时间:2023-11-30 04:16:34 27 4
gpt4 key购买 nike

我正在测试使用 Stage 作为带有简单按钮的主菜单,使用 NinePatch 作为按钮背景。

设置此功能的代码如下所示:

NinePatch 文本按钮设置

NinePatch btnNormal9 = NinePatchHelper.processNinePatchFile("data/button_normal.9.png");

NinePatchDrawable btnNormal9Drawable = new NinePatchDrawable(btnNormal9);

TextButtonStyle style = new TextButtonStyle(btnNormal9Drawable, btnNormal9Drawable, btnNormal9Drawable);
style.font = new BitmapFont();
style.fontColor = new Color(1, 1, 1, 1);

button = new TextButton("Start Game", style);
button.setSize(200, 100);
button.setPosition(0, 0);

stage.addActor(button);


然后在我的调整大小函数中,我现在只是这样做:

调整代码大小

@Override
public void resize(int width, int height) {
camera.viewportWidth = width;
camera.viewportHeight = height;
camera.update();
}


无论窗口大小(即相机视口(viewport)的大小)如何,按钮都应位于屏幕上的 (0,0) 处,并且大小为 200 像素 x 100 像素。

NinePatch 图像(“data/button_normal.9.png”)为 26x26 像素。但使用此代码(取自此处:Loading nine-patch image as a Libgdx Scene2d Button background looks awful)裁剪为具有 4px 分区的 24x24 纹理:

创建 NinePatch

public static NinePatch processNinePatchFile(String filename) {
final Texture t = new Texture(Gdx.files.internal(filename));
final int width = t.getWidth() - 2;
final int height = t.getHeight() - 2;
return new NinePatch(new TextureRegion(t, 1, 1, width, height), 4, 4, 4, 4);
}


只要窗口尺寸是偶数,例如,这就可以正常工作。 640x400像素,如下面的屏幕截图所示:

enter image description here

但是,如果窗口尺寸是奇数,例如639x401 像素,则 NinePatch 无法正确缩放:

enter image description here

如果只有高度为奇数,那么渲染错误只发生在NinePatch的垂直缩放上,如下:

enter image description here

我不明白为什么会发生这种情况,因为按钮的大小和位置被硬编码为在每种情况下都相同,因此 NinePatch 应该绘制得完全相同。

如果有人可以提供任何帮助,我将不胜感激。

提前致谢。

最佳答案

好吧,我想我意识到发生了什么,我很愚蠢。

如果屏幕尺寸为奇数,则屏幕中心不再是整数像素值,而是 0.5 值。这意味着在整数位置绘制的任何内容都会变得模糊。

我认为解决此问题的最简单方法是更改​​调整大小方法。如果高度或宽度为奇数,请将相机的 x 或 y 位置设置为 0.5 而不是 0,如下所示。这解决了问题:)

if (width % 2 != 0) guiCamera.position.x = 0.5f;
else guiCamera.position.x = 0f;

if (height % 2 != 0) guiCamera.position.y = 0.5f;
else guiCamera.position.y = 0f;

关于java - TextButton 背景上的 NinePatch 渲染问题 (libgdx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18197660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com