我正在尝试使用LibGDX创建一个简单的游戏。我试图使用9个Patch图像作为菜单按钮的背景,但是看起来图像的9个Patch质量被忽略了。
我有两张图片,“active.9.png”和“rest.9.png”。这些是方形图像,表示按钮处于活动或静止状态。我使用此工具创建它们:http://romannurik.github.io/AndroidAssetStudio/nine-patches.html所以我确信它们符合9个补丁要求。下面是“active.9.png”的图片:
因为我正在使用LibGDX,并且会有很多资产我想使用TextureAtlas来存储我的按钮图像。在运行TexturePacker之后,事情似乎仍然有效,因为图像已经定义了“split”,我认为它们已被识别为9个Patch文件。下面是“buttons.pack”:
buttons.png
format: RGBA8888
filter: Nearest,Nearest
repeat: none
active
rotate: false
xy: 1, 1
size: 226, 225
split: 59, 57, 58, 58
orig: 226, 225
offset: 0, 0
index: -1
rest
rotate: false
xy: 229, 1
size: 226, 225
split: 59, 57, 58, 58
orig: 226, 225
offset: 0, 0
index: -1
接下来,我尝试从这个包中创建一个TextureAtlas,创建一个Skin,然后将图像加载到Skin中。
TextureAtlas buttonAtlas = new TextureAtlas("images/buttons/buttons.pack");
skin = new Skin();
skin.addRegions(buttonAtlas);
skin.add("rest", buttonAtlas.createPatch("rest"));
skin.add("active", buttonAtlas.createPatch("active"));
最后我尝试将此Skin应用于按钮。我尝试了两种不同的方式..
方法1:
TextButtonStyle buttonStyle = new TextButtonStyle();
buttonStyle.up = new NinePatchDrawable(buttonAtlas.createPatch("rest"));
buttonStyle.down = new NinePatchDrawable(buttonAtlas.createPatch("active"));
输出1:
方法2:
TextButtonStyle buttonStyle = new TextButtonStyle();
buttonStyle.up = new NinePatchDrawable(new NinePatch(new Texture(Gdx.files.internal("images/buttons/rest.9.png"))));
buttonStyle.down = new NinePatchDrawable(new NinePatch(new Texture(Gdx.files.internal("images/buttons/active.9.png"))));
输出2:
虽然输出2看起来更好,但实际上似乎忽略了9个补丁质量并且图像已被简单地拉伸以适应。
我真的很感激任何帮助,我完全被难倒,似乎没有任何最新的教程或文档。
感谢您的时间
答案 0 :(得分:3)
我认为其中一个错误就是图像线。
我使用draw9patch,我不知道它是否是你使用的工具,不知道。 可以在以下位置找到此工具:yourAndroid-sdk / tools / - > draw9patch “lookVertical Path”例如:
// 变量类:
private TextureAtlas buttonsAtlas;
private NinePatch buttonUpNine;
private TextButtonStyle textButtonStyle;
private TextButton textButton;
private BitmapFont font;
// 添加显示或创建例如:
buttonsAtlas = new TextureAtlas("data/ninePatch9/atlasUiScreenOverflow.atlas");
buttonUpNine = buttonsAtlas.createPatch("buttonUp");
font = new BitmapFont(); //** default font, for test**//
font.setColor(0, 0, 1, 1); //** blue font **//
font.setScale(2); //** 2 times size **//
textButtonStyle = new TextButtonStyle();
textButtonStyle.up = new NinePatchDrawable(buttonUpNine);
textButtonStyle.font = font;
textButton = new TextButton("test", textButtonStyle);
textButton.setBounds(100, 250, 250, 250);
在阶段添加例如:
yourStage.addActor(textButton);
//
例如:如果你的按钮大于或等于ninePath的一面,看起来像这样:(抱歉我的英文希望你能理解我)
textButton.setBounds(100,250,250,250);
看起来不错。
但如果它小于九行,例如100,请查看:
如果您需要,textButton.setBounds(100,150,250,100);
用于测试的资产:
// atlasUiScreenOverflow.atlas
atlasUiScreenOverflow.png
size: 232,231
format: RGBA8888
filter: Nearest,Nearest
repeat: none
buttonUp
rotate: false
xy: 2, 2
size: 230, 229
split: 49, 51, 49, 52
orig: 230, 229
offset: 0, 0
index: -1
// atlasUiScreenOverflow.png
有几种方法可以使用ninePatch,但这是我现在想到的这个案例,我希望,很好理解,并帮助你。
修改:我刚刚测试了您使用的工具,效果很好。
您使用textButton = new TextButton("test", textButtonStyle);
?