我有以下问题:
我正在尝试使用表格布局在libgdx中实现带子菜单的菜单。单击子菜单时,将触发一个侦听器,该侦听器应设置上一个菜单的可见(false),并设置为新的setVisible(true)。但是,虽然我成功地展示了新的,但前一个仍然在这里!有人能帮助我吗?
这是我的代码:
Menu.java:
public class Menu extends Table {
private Stage stage;
public void attachToStage(Stage s) {
if (s != null) {
stage = s;
s.addActor(this);
}
}
public Menu() {
this(null);
}
public Menu(final Stage s) {
attachToStage(s);
setFillParent(true);
top();
left();
}
private void addButtonWithListener(String label, ClickListener listener) {
add().width(10);
Label l = new Label(label, SkinManager.get());
add(l).width(100);
row();
if (listener != null)
l.addListener(listener);
}
/**
* @param label
* @return The menu, for chaining
*/
public Menu addButton(String label) {
addButtonWithListener(label, null);
return this;
}
/**
*
* @param label
* @param m
* the menu to add
* @return The main menu, for chaining
*/
public Menu addMenu(String label, final Menu m) {
addButtonWithListener(label, new ClickListener() {
@Override public void clicked(InputEvent e, float x, float y) {
System.out.println(getChildren());
setVisible(false);
m.setVisible(true);
}
});
m.attachToStage(stage);
m.setVisible(false);
return this;
}
}
我的申请:
public class TestApplication implements ApplicationListener {
private Stage stage;
@Override public void create() {
stage = new Stage();
Menu m = new Menu(stage).addButton("Move").addButton("Stay");
m.addMenu("Attack", new Menu().addButton("Sword").addButton("Bow"));
Gdx.input.setInputProcessor(stage);
}
@Override public void render() {
stage.draw();
}
// Other empty methods
}
非常感谢!
编辑:问题无关,请参阅我的回答
答案 0 :(得分:0)
好的,发现问题:与表格完全无关,只是忘了清除应用程序中的屏幕。
我刚刚添加了
Gdx.gl.glClearColor(0, 0, 0, 0);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
在渲染功能中。