将Actor的精灵设置为默认值

时间:2015-03-15 13:20:32

标签: java libgdx

我的Actor物品遇到了麻烦。当我点击Button Actor时,我希望它切换Screen。当我这样做,并且我返回到最后一个屏幕时,我点击的按钮仍在盘旋,直到我再次移动鼠标:

enter image description here

我拥有的代码:

// 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文件中)上/下是"开始新游戏"显示它。过度精灵是指它具有灰色背景(例如"加载游戏")。

1 个答案:

答案 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);