背景:我正在使用LibGDX和Scene2D开发“太空入侵者”风格游戏。下面的代码块是我创建的OverlayStage
的一部分,仅当GameStage
为GameState
,READY
时才会在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));
}
}