我正在测试使用 Stage 作为主菜单和简单的按钮,使用 NinePatch 作为按钮背景。
设置它的代码如下所示:
NinePatch TextButton 设置
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();
}
无论窗口的大小(即相机视口的大小)如何,按钮都应位于屏幕上的 (0,0) 处,并且为 200 像素 x 100 像素。
NinePatch 图像(“data/button_normal.9.png”)为 26x26 像素。但是使用此代码裁剪为具有 4px 分区的 24x24 纹理(取自此处:将九个补丁图像加载为 Libgdx Scene2d 按钮背景看起来很糟糕):
创建 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 像素),就可以正常工作,如下面的屏幕截图所示:
但是,如果窗口尺寸是奇数,例如639x401 像素,则 NinePatch 没有正确缩放:
如果只有高度是奇数,那么渲染错误只发生在 NinePatch 的垂直缩放中,如下:
我不明白为什么会发生这种情况,因为按钮大小和位置在每种情况下都被硬编码为相同,所以 NinePatch 应该完全一样地绘制。
如果有人可以提供任何帮助,我将不胜感激。
提前致谢。