【问题标题】:libgdx TextureAtlas, and NinePatch'slibgdx TextureAtlas 和 NinePatch 的
【发布时间】:2013-03-25 03:59:22
【问题描述】:

我正在使用 libgdx 制作一个简单的游戏。我有一个 TextureAtlas,有我正在尝试使用的 Ninepatch:

图片保存为menu.9.png

我正在使用以下代码:

Image bg = new Image(Room.iAtlas.findRegion("GUI/menu"));
bg.setBounds(guix-border,guiy-border,(border+radius)*2,(border+radius)*2);
batch.begin();
    bg.draw(s,1);
batch.end();

输出是这样的:

我真的不知道我做错了什么,但它应该更像这样(除了它上面有形状,但我没有添加那些):
(我是手工创建的,我从来没有真正使用过 9patch,而且它没有船,因为我没有费心去编辑它们)

【问题讨论】:

    标签: libgdx nine-patch


    【解决方案1】:

    看起来你的“九补丁”没有被视为真正的九路径,而是被视为“退化”九补丁(我之前遇到过非常类似的问题:Loading nine-patch image as a Libgdx Scene2d Button background looks awful,虽然我不是' t 使用 TextureAtlas 这应该是解决方案。)

    基本上,当 Libgdx 从您的图集中读取九个补丁时,它应该读取描述如何将图像分成 9 个图块的所有元数据(请参阅https://code.google.com/p/libgdx/wiki/TexturePacker#NinePatches)。我看到几个地方可能会出错:

    1. 您的纹理不是有效的九补丁,元数据被忽略。 (使用 Android draw9patch 工具检查。)
    2. 您的纹理打包程序未正确处理.9.png 文件。检查您的地图集的 .txt 文件的内容,并查看它是否具有与“menu.9.png”条目关联的“拆分”条目。
    3. 纹理查找只是为九个补丁区域返回一个常规的TextureRegion 包装器,而不是将它包装在NinePatch 对象中。尝试使用TextureRegion.createNinePatch 使其更明确。 (我的印象是这没有必要,但也许是……)

    【讨论】:

    • 感谢您的帮助,我会调查这些东西。早些时候我尝试了 TextureAtlas.createPatch(String name) ,它应该“获得第一个具有该名称的 NinePatch”。
    • @csga5000 你应该把你的评论作为一个有效的答案,它对我有用。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-27
    • 1970-01-01
    相关资源
    最近更新 更多