【问题标题】:LibGDX 9 Patch Images aren't working with TextButtonStyle and TextureAtlasLibGDX 9 补丁图像不适用于 TextButtonStyle 和 TextureAtlas
【发布时间】:2015-02-18 11:50:15
【问题描述】:

我正在尝试使用 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 之后,一切似乎仍然有效,因为图像已定义“拆分”,我认为这表明它们已被识别为 9 个补丁文件。下面是“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,创建一个皮肤,并将图像加载到皮肤中。

    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"));

最后我尝试将这个皮肤应用到按钮上。我尝试了两种不同的方法..

方法一:

TextButtonStyle buttonStyle = new TextButtonStyle();
buttonStyle.up =  new NinePatchDrawable(buttonAtlas.createPatch("rest"));
buttonStyle.down = new NinePatchDrawable(buttonAtlas.createPatch("active"));

输出 1:

方法二:

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 个 Patch 质量,并且图像已被简单地拉伸以适应。

我真的很感谢任何帮助,我完全被难住了,似乎没有任何最新的教程或文档可用。

感谢您的宝贵时间

【问题讨论】:

    标签: android libgdx skin texturepacker


    【解决方案1】:

    我认为错误之一是图像线。

    我用的是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);
    

    在stage中添加例如:

     yourStage.addActor(textButton);
    

    //

    eg:如果你的按钮大于或等于ninePath的边,看起来像这样:(对不起我的英语希望你能理解我)

    textButton.setBounds(100, 250, 250, 250);

    看起来不错。

    但如果它少于 9 行,例如 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);?

    【讨论】:

    • 哇,非常感谢您花时间回复。我改变了两件事,我现在使用 textButtonStyle.up = new NinePatchDrawable(buttonUpNine);我重新制作了按钮图片,角落里的“倾角”要小得多。由于您的解释,我意识到跌幅太大了,所以再次非常感谢您
    猜你喜欢
    • 2021-02-07
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 2015-05-21
    • 2011-05-15
    • 2013-08-02
    • 2016-11-22
    相关资源
    最近更新 更多