我成功地将自己的字体添加到默认的.json文件中并显示,但是我得到了一些奇怪的大小调整问题。特别是当我尝试创建一个Dialog时。这就是它的样子: 忽略这样的事实"和"
如你所见,标题不是合适,按钮看起来有点大......这就是我创建对话框的方式:
Dialog d = new Dialog("Error", RBResources.gameSkin);
d.add(new Label("You cannot continue and empty game.", RBResources.gameSkin));
TextButton b = new TextButton("Ok", RBResources.gameSkin);
d.button(b);
d.show(this);
这是皮肤初始化的方式:
gameSkin = new Skin(Gdx.files.internal("skins/uiskin.json"));
我添加字体的所有内容都是使用Hiero创建字体,使用.json将其添加到目录中,并从" default.fnt"更改BitmapFont文件引用。 to" text.fnt" (文字就是我所说的字体)。
答案 0 :(得分:4)
所以我一直在想的是:对话框是用单个NinePatch构建的,所以你需要在.atlas文件和.png文件中手动调整标题栏的大小。
<强> 修改 强>
这基本上是一个如何使用带有LibGdx的JSON文件教程。
LibGdx有一个非常有用的类叫Skin
。它允许您将.json文件与.atlas文件和.png图像一起使用,以便非常轻松地定义用于制作Button
,TextButton
s,Dialog
等的样式。
LibgGdx默认皮肤
JSON文件的工作原理
JSON文件包含不同类类型及其参数的列表。在这个问题的情况下,我们将看看Dialog
风格。因为对话框是Window
的子类,所以它使用WindowStyle
(并非所有其他类的子类都这样做),因此我们必须查看WindowStyle
的JSON文件。
com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
default: { titleFont: default-font, background: default-window, titleFontColor: white },
dialog: { titleFont: default-font, background: default-window, titleFontColor: white, stageBackground: dialogDim }
},
如您所见,对话框是用于Dialog
的样式类型,而默认用于常规Window
。大多数属性都是不言自明的,但您需要知道的是,字体总是在JSON文件中声明,位于顶部。您可以添加任意多个,只需确保在与JSON文件相同的文件夹中包含该字体的.fnt文件和.png图像,并正确引用它们。你可以使用像Hiero这样的BitmapFont
生成器轻松制作字体,可以在这里找到:https://github.com/libgdx/libgdx/wiki/Hiero。颜色也在JSON文件的顶部创建,位于字体下方。您可以根据需要创建任意数量的内容。 stageBackground
是在显示对话框时将覆盖舞台其余部分的颜色。在这种情况下,它是dialogDim
,在JSON文件中定义为TintedDrawable
。最后一个属性是对ATLAS Image Pack中图像的引用。
ATLAS文件如何工作
ATLAS文件基本上是对ATLAS图像包中TextureRegion
的引用的集合。其中许多是不言自明的,其余的可以通过一些试验和错误来理解,但是现在我们将专注于对话框片段的引用。 default-window
在ATLAS文件中引用此位:
default-window
rotate: false
xy: 1, 20
size: 27, 29
split: 4, 3, 20, 3
orig: 27, 29
offset: 0, 0
index: -1
这些字段可能有点令人困惑,我也不理解它们,但您需要知道的是rotate
应始终保持为假,除非您知道它何时不应该。 xy
是ATLAS图像包中TextureRegion
的x和y位置,(以像素为单位)。 size
是x大小和y大小,以像素为单位。 split
是TextureRegion
应该如何拆分(不适用于所有ATLAS参考),您可以在此处找到有关这些数字如何工作的更多信息:https://github.com/libgdx/libgdx/wiki/Ninepatches。据我所知,orig
始终与size
相同。除非您有理由让该区域在开始时偏离offset
位置,否则xy
应始终保持为0,0。 index
为-1意味着该区域与其他区域位于同一ATLAS图像包内。
如何使用
现在您可以轻松进行自己的修改。只需找到您想要添加自己的样式,复制要更改的样式(或直接更改默认值),为其添加自己的名称,并添加自己的ATLAS引用。在ATLAS文件和图像包中,您还可以添加自己的区域。您还可以为样式之外的其他类添加自己的属性,因为Skin类似乎是JSON阅读器上的一个轻量级包装器,可以轻松读取样式。
我希望这一切都是可以理解的:)
答案 1 :(得分:0)
正如StrongJoshua在他的answer中所说,对话框的背景是NinePatch,因此标题栏的大小由NinePatch所基于的PNG定义。
如果你不喜欢使用像素编辑器搞乱这一切,那么快速而肮脏的解决方案就是改变NinePatch渲染的比例。这将使它更像“像素”&#39;但也会增加标题栏的大小。
您可以访问NinePatch对象并从对话框中调用scale()
,如下所示:
NinePatchDrawable dialogBack = (NinePatchDrawable)dialog.getBackground();
dialogBack.getPatch().scale(2.0f,2.0f);
编辑: 但问题是,每次调用scale()都是相加的,因此每次执行此操作时,它的大小都会增加一倍。如果你总是想要相同的尺寸,最好在你加载皮肤后立即设置一次,如下所示:
NinePatch dialogBack = skin.getPatch("default-window");
dialogBack.scale(2.0f,2.0f);