【发布时间】:2016-12-22 11:14:47
【问题描述】:
我目前正在为我的第一个 android 游戏开发 StartMenu,我目前遇到了 3 个问题:
1) 舞台不完全适合屏幕。我已经尝试将不同的视口类型(stretch-、fit、extendviewport)传递给舞台构造函数,但它们都没有真正达到我的预期。我还为视口尝试了不同的参数(例如,480、800 等数字以及 Gdx.graphics.getWidth()),但我无法使菜单分辨率独立(在 s3 mini 和华为 P8 上尝试过),它要么转太小或太大。
2) 设置按钮不在表格单元格中居中。
3) 按钮改变大小。按下时,它们会填充它们所在的单元格,如何禁用此功能? (顺便说一下,我用 JSON 文件定义了按钮皮肤,但我怀疑这是原因)
@Override
public void resize(int width, int height) {
stage.getViewport().update(width, height, true);
}
@Override
public void show() {
stage = new Stage(new ExtendViewport(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT));
Gdx.input.setInputProcessor(stage);
rebuildStage();
}
private void rebuildStage() {
skinStartMenu = new Skin(
Gdx.files.internal(Constants.SKIN_Start_Menu_UI),
new TextureAtlas(Constants.Start_Menu_Texture_Atlas));
Table layerControls = buildControlsLayer();
stage.clear();
Stack stack = new Stack();
stage.addActor(stack);
stack.setSize(Constants.VIEWPORT_GUI_WIDTH, Constants.VIEWPORT_GUI_HEIGHT);
stack.add(layerControls);
}
private Table buildControlsLayer() {
Table layer = new Table();
// + Play Button
btnMenuPlay = new Button(skinStartMenu, "play");
layer.add(btnMenuPlay);
btnMenuPlay.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
onPlayClicked();
}
});
layer.row();
// + Options Button
btnMenuOptions = new Button(skinStartMenu, "options");
layer.add(btnMenuOptions);
btnMenuOptions.addListener(new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
onOptionsClicked();
}
});
if (debugEnabled) layer.debug();
return layer;
}
No Button Pressed; Button Pressed
编辑:我通过调整表格单元格的大小解决了第一个问题,但是我仍然没有解决问题 2) 和 3) 的方法。
【问题讨论】:
-
你真的需要一个堆栈吗?它使布局更加复杂。如果您想控制 Stack 的位置,则必须将 Stack 的每个子项包装在 Container 中。
-
实际上我现在不需要它。但我不认为它会有所作为,所以我把它留在那里,以防我将来需要它 x)