gpt4 book ai didi

java - 加载 9-patch 图像作为 Libgdx Scene2d 按钮背景看起来很糟糕

转载 作者:搜寻专家 更新时间:2023-11-01 01:27:22 24 4
gpt4 key购买 nike

我正在尝试使用 Nine Patch作为 Libgdx Scene2d UI 按钮的背景。它正在加载,但它真的很难看。我可以看到“元数据”像素,并且它被拉伸(stretch),就好像它只是一个普通图像(按钮上的文本是“继续”):

ugly image of a nine-patch button

我正在将 .9.png 文件直接加载到 (libgdx) NinePatchDrawable 中通过 (libgdx) NinePatch像这样:

this.dialogButtonUp = new NinePatchDrawable(
new NinePatch(new Texture(Gdx.files.internal("data/button-round.9.png"))));
this.dialogButtonDown = new NinePatchDrawable(
new NinePatch(new Texture(Gdx.files.internal("data/button-round-down.9.png"))));

然后我制作了一个描述按钮的 TextButtonStyle,并引用了两个 NinePatch 可绘制对象:

TextButton.TextButtonStyle buttonStyle = new TextButton.TextButtonStyle();
buttonStyle.font = aValidFontReally;
buttonStyle.fontColor = Color.BLACK;
buttonStyle.up = this.dialogButtonUp;
buttonStyle.down = this.dialogButtonDown;
buttonStyle.pressedOffsetX = -2;

我通过 Dialog 框间接构建按钮:

new Dialog( ... ).button("Continue", null, buttonStyle);

我检查了 .9.png 文件以确保:

  • Assets 文件已在 Eclipse 中刷新
  • 元数据边框像素要么是完全不可见的,要么是完全可见的黑色
  • Android draw9patch 工具可以加载图像并验证它们

关于检查或更改内容的任何其他建议?

最佳答案

感谢@RodHyde 的一些指点,看起来 libgdx NinePatch 类被设计为接受“后处理”九补丁纹理(即,具有描述如何切割的单独整数值单个纹理成补丁)。这种“处理”通常是将“.9.png”文件打包到 TextureAtlas 中的副作用(参见 https://github.com/libgdx/libgdx/wiki/Texture-packer#ninePatches)。纹理图集是一个非常好的主意(特别是当您的 UI 包含一堆不同的纹理元素时),所以这是有道理的,但在开发和尝试运行某些东西时有点令人惊讶。

为了解决这个问题,我可以直接包含“.9.png”文件,我写了这个:

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

这会加载纹理,创建一个修剪掉 1 像素元数据边界的子区域,然后猜测九 block 边界元素的宽度/高度为 3 像素。 (通过处理纹理数据来正确计算似乎是可能的,但不值得付出努力——在这种情况下,只需将纹理放入图集即可。)

关于java - 加载 9-patch 图像作为 Libgdx Scene2d 按钮背景看起来很糟糕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15355723/

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