我的Actor
物品遇到了麻烦。当我点击Button Actor
时,我希望它切换Screen
。当我这样做,并且我返回到最后一个屏幕时,我点击的按钮仍在盘旋,直到我再次移动鼠标:
我拥有的代码:
// Load Game
textButtons[1].addListener(new ClickListener() {
@Override
public void clicked(InputEvent event, float x, float y) {
// GameState is a subclass of Screen,
// GameStateManager helps me to manage my GameStates.
game.setGameState(GameStateManager.get("screenLoadGame"));
}
});
我试图"欺骗"要通过使用keyUp
方法解决此问题,并执行以下操作:
@Override
public void touchUp (InputEvent event, float x, float y, int pointer, int button) {
super.touchUp(event, x, y, pointer, button);
int[] mousePos = { Gdx.input.getX(), Gdx.input.getY() };
Gdx.input.setCursorPosition(0, 0);
stage.act(1);
game.setGameState(GameStateManager.get("screenLoadGame"));
Gdx.input.setCursorPosition(mousePos[0], mousePos[1]);
}
但它没有用。
最后,我希望能够从一个Screen
切换回Main Menu Screen
,并将按钮作为默认精灵。有没有办法设置Actor's (Button's) Sprite
?
注意:对于精灵(在Json文件中)上/下是"开始新游戏"显示它。过度精灵是指它具有灰色背景(例如"加载游戏")。
答案 0 :(得分:2)
使用ChangeListener而不是ClickListener。这也可以让你的按钮表现得像预期的按钮(如果你点击下来并在释放之前将光标从按钮上移开,它将不会触发)。
您可以非常轻松地将单个ChangeListener用于许多按钮,以保持代码整洁。
ChangeListener changeListener = new ChangeListener() {
@Override
public void changed(ChangeEvent event, Actor actor) {
if (actor == startNewGameButton){
startNewGame();
} else if (actor == loadGameButton){
loadGame();
} else if (actor == creditsButton){
showCreditsScreen();
}
}
};
然后将其添加到按钮:
startNewGameButton.addListener(changeListener);