我想创建一个按钮,当用户将其悬停或单击时,该按钮会发生变化.我创建了以下变量
Button buttonPlay = new Button();
Run Code Online (Sandbox Code Playgroud)
我现在不知道该怎么办,如何加载图片?如何在按钮中写入文字?如何实现事件/效果(悬停,点击)?
如果有人可以为按钮编写一些示例代码,那将非常有用.
在我的uiskin.json中我有这个
com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: text/default.fnt } }
当我在assets文件夹的text文件夹中有default.fnt时,这很好用...
但是我想使用Freetypefont.
如何创建Freetypefont并将其加载到uiskin文件中?
我是Android游戏开发的新手,在我开始使用libgdx ShapeRenderer并进行了一些搜索后,如果我用右脚开始,我会感到困惑.
所以,我真正想知道的是什么时候应该使用ShapeRenderer,Mesh + SpriteBatch,Box2D和Scene2D.
我正在学习libgdx,但我陷入了困境......
我在舞台上添加了一个按钮,现在我想在舞台上添加一个图像,使图像看起来像按钮的背景图像.我的意思是按钮应该位于图像上.我一直在寻找教程,但没能做到这一点.
怎么做到呢?任何帮助?
我试图了解如何在LibGDX中使用ProgressBar.
我创建了酒吧,但我不知道如何让它成功.我想复制旋钮,以便在60秒内填充条形图(背景线).我知道如何管理时间,但ProgressBar类中没有方法用旋钮填充栏.至少,我还没有看到它(或者我不明白怎么样).这是我的代码:
ProgressBar的代码:
skin = new Skin();
Pixmap pixmap = new Pixmap(10, 10, Format.RGBA8888);
pixmap.setColor(Color.WHITE);
pixmap.fill();
skin.add("white", new Texture(pixmap));
textureBar = new TextureRegionDrawable(new TextureRegion(new Texture(Gdx.files.internal("barGreen_horizontalMid.png"))));
barStyle = new ProgressBarStyle(skin.newDrawable("white", Color.DARK_GRAY), textureBar);
bar = new ProgressBar(0, 10, 0.5f, false, barStyle);
bar.setPosition(10, 10);
bar.setSize(290, bar.getPrefHeight());
bar.setAnimateDuration(2);
stage.addActor(bar);
Run Code Online (Sandbox Code Playgroud)
我知道我可以用这个方法移动旋钮setValue(float).但我想要的是用旋钮的纹理填充条形.这是一个酒吧的截图和旋钮.

任何人都可以帮我理解这个吗?提前致谢.
是否无法旋转标签?似乎API具有该功能,但它似乎不起作用?有没有更多旋转文字的方法?
Label nameLabel = new Label( "Test", skin);
nameLabel.setRotation( 90 );
stage.addActor( nameLabel );
Run Code Online (Sandbox Code Playgroud) 我在libgdx库中使用scene2d在我的游戏中创建一些UI.
我使用了一个表格,当用户触摸按钮触摸感觉时,我想采取一些缩放操作.
当我使用像Group这样的任何其他"Actor"类型并给它一个缩放动作时,它可以工作但不是Table.
这是我的表定义:
Table table = new Table();
table.setSize(width, height);
table.setPosition(x, y);
table.setOrigin(width/2, height/2);
table.add(new Label(...));
table.row();
...
Run Code Online (Sandbox Code Playgroud)
在我的touchDown事件中,我给它一个缩放动作:
table.addAction(Actions.scaleTo(0.8f, 0.8f, 0.1f));
Run Code Online (Sandbox Code Playgroud)
在touchUp中,我给它另一个动作来获得原始比例:
table.addAction(Actions.scaleTo(1f, 1f, 0.1f));
Run Code Online (Sandbox Code Playgroud)
正如我所说,这段代码适用于其他类型的Actors,如Image和Group.任何想法,为什么不适用于表?
你会得到一个带有几个和的复杂Scene2D图形.您希望用户选择一些并在最后绘制它们,以便它们看起来集中在任何其他顶部.libgdxGroup'sActor'sActorsActors
我想迭代Stage两次.第一次绘制未选中的Actors,第二次绘制选中的actors.但是,我没有看到任何"好"的方式来强制执行此行为.
我更喜欢干净的选择.我不想仅仅为了这个小小的添加而复制整个方法实现.
什么行不通:
Actor's toFront()方法仅适用于它的兄弟姐妹.Actor's舞台中的位置:这会修改其所具有的变换Actors.想一想的情景:你有Root一个团体gA和一个团体gB.Group gA包含两个图像iA1和iA2.Group gB包含一个图像iB.鉴于Group gA首先被添加到阶段并且图像iA1与iB重叠; 现在你想选择iA1并让它出现在iB上.我不想只调用gA.toFront() ; 这会将整个Group gA放在前面,这意味着iA2也被放到了前面.将iA2放在前面会产生不希望的影响,即将部分图像隐藏在Group gB中

这是一段代码片段.
itemList = new List(skin, "ariel.32.white");
String[] tmpInv = new String[b+1];
tmpInv[0] = "<Empty>";
a++;
for (Entry<String, String> entry : inventoryItems.entrySet()) {
tmpInv[a] = entry.getKey();
a++;
//String key = entry.getKey();
//Object value = entry.getValue();
// ...
}
Arrays.sort(tmpInv);
itemList.setItems(tmpInv);
inventoryPane = new ScrollPane(itemList, skin);
Run Code Online (Sandbox Code Playgroud)
这是我得到的,它工作正常.我想在每个项目前面添加描述性图标,但我似乎无法让它工作.我还需要一些方法来获取添加后所选内容的名称.目前我用
itemlist.getSelectedIndex();
Run Code Online (Sandbox Code Playgroud)

libgdx ×10
scene2d ×10
java ×7
android ×3
box2d ×1
freetype ×1
game-engine ×1
image ×1
inline ×1
progress-bar ×1
scenegraph ×1
scrollpane ×1
tablelayout ×1