在libgdx中使用scene2d.ui:皮肤从哪里来?

我已经阅读了关于libgdxscene2dfunction ,包括UI元素,但是我不能让它们工作。 他们都似乎使用皮肤对象,我该如何创build一个?

我已经通过了一个漂亮的教程 ,创build了一个简单的libgdx游戏捕捉雨滴在一个桶中,我已经创build了一个简单的棋盘游戏应用程序加载图像纹理地图集 。 然而,scene2d听起来像是一个更好的方式来控制棋盘游戏应用程序中的移动棋子,以及任何button和菜单。

Solutions Collecting From Web of "在libgdx中使用scene2d.ui:皮肤从哪里来?"

要加载皮肤,可以从libgdxtesting项目中使用的示例皮肤文件开始。

  1. Atlaspack文件
  2. Json文件
  3. 阿特拉斯图像
  4. 字体文件

在这个问题中有更多的细节,我发现我必须将文件移动到资产的子目录中,以避免HTML版本中的错误。 (如果我将文件保留在资产文件夹中,则会看到类似“GwtApplication:exception:读取文件数据/ uiskin.json时出错”的错误消息。)

我发布了一个完整的例子 ,显示一个button,有趣的代码都在游戏类 。 这个例子非常简单,只需要两个成员variables来保存场景和button。

private Stage stage; private TextButton button; 

要创build皮肤,只需加载数据文件。

 Skin skin = new Skin(Gdx.files.internal("data/uiskin.json")); 

将button连接到舞台上。

 stage = new Stage(); button = new TextButton("Click Me!", skin); stage.addActor(button); 

将一个监听器连接到button中,并注册舞台以接收事件。

 button.addListener(new ClickListener() { @Override public void clicked(InputEvent event, float x, float y) { button.setText("Clicked!"); } }); Gdx.input.setInputProcessor(stage); 

render()方法基本上是对stage.draw()的调用。

 Gdx.gl.glClearColor(1, 1, 1, 1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT); stage.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f)); stage.draw(); 

然后你只需要resize时的屏幕布局。

 button.setPosition( (width-button.getWidth())/2, (height-button.getHeight())/2); 

如果你的屏幕比较复杂,可以考虑使用表格 。

如果你想使用不同的字体,你可以使用Hiero生成字体文件和图像文件。 完成之后,您将不得不采取新的字体图像,并使用TexturePacker与其他外观资源重新打包。

现在Libgdx提供了Git仓库来获取皮肤,你可以从下载: https : //github.com/libgdx/libgdx-skins ,复制资产: https : //github.com/libgdx/libgdx-skins/tree/master/皮肤/ visui /资产到您的项目