将动作添加到ClickListener Libgdx内部的Stage Root

时间:2015-12-27 01:31:53

标签: java libgdx clicklistener

背景:我正在使用LibGDX和Scene2D开发“太空入侵者”风格游戏。下面的代码块是我创建的OverlayStage的一部分,仅当GameStageGameStateREADY时才会在PAUSED之上呈现,或GAMEOVER。因此,每次需要OverlayStage时,都会调用下面的addActions()方法。

问题:我的问题只出现在PAUSED GameState的情况下。 (下面else语句中调用的动作工作得很好)理想情况下,我希望OverlayStage淡入并等待用户触摸屏幕(屏幕上的任何位置),然后逐渐淡出。但是,当使用下面的ClickListener添加操作时,屏幕不会褪色,而是立即消失。我做了一些调试,发现isDoneAction延迟了我在fadeOutAction内分配给ActionUtils的时间。这一点,以及下面的所有其他操作在我的代码的其他部分中没有问题的事实让我相信问题必须来自使用ClickListener

我已经被困在这几天了,因为它是如此具体,我找不到任何其他资源。非常感谢您提供的任何帮助。

private void addActions() {

    final Action isDoneAction = new Action() {
        @Override
        public boolean act(float delta) {
            isStageDone = true;
            return false;
        }   
    };

    if(state == GameState.PAUSED) {
        Action touchListenAction = new Action() {
            @Override
            public boolean act(float delta) {
                getRoot().addListener(new ClickListener() {
                    @Override
                    public void clicked(InputEvent event, float x, float y) {
                        getRoot().addAction(Actions.sequence(ActionUtils.fadeOutAction(),
                                            isDoneAction));
                    }
                });
                return false;
            }   
        };

        getRoot().addAction(Actions.sequence(ActionUtils.fadeInAction(), touchListenAction));
    }
    else {          
        getRoot().addAction(Actions.sequence(ActionUtils.fadeInAction(),
                            Actions.delay(MAX_SCREEN_TIME, ActionUtils.fadeOutAction()),
                            isDoneAction));
    }
}

0 个答案:

没有答案