我现在尝试以三种不同的方式在libGDX中设置延迟。
首先我尝试使用Timer
,但如果我重新启动活动,计时器将不会再次启动。使用GestureDetector
:https://github.com/libgdx/libgdx/issues/2274
然后我尝试在我的渲染方法中使用Gdx.graphics.getDeltaTime
设置一个计时器,但这对我不起作用,因为我已将其设置为非连续渲染。在答案#2 set a delay in libgdx game
最后我尝试使用while循环和System.getCurrentTimeMilliseconds
,但这阻止了应用程序在while循环循环时识别tap。
我也听说过DelayAction
,但是如何在代码中实现呢? https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/scenes/scene2d/actions/DelayAction.html
还有另一种设置延迟的方法吗?如何实现DelayAction
?或者如何解决libGDX中的Timer
错误?
答案 0 :(得分:2)
受到Barodapride评论的启发,我找到了一个解决方案,我创建了一个新线程,并将while
循环放在此处。此代码将等待1000毫秒,然后在主线程上运行foo()
。
new Thread(new Runnable() {
@Override
public void run() {
long time = System.currentTimeMillis();
while (System.currentTimeMillis() < time + 1000){}
Gdx.app.postRunnable(new Runnable() {
@Override
public void run() {
foo();
}
});
}
}).start();
答案 1 :(得分:0)
我只是创建一个这样的界面:
DATE
并为我想要的游戏实体创建一个实现它的类,我的案例的事件是一个包含要处理的事件的枚举(比如等待x秒,行走x秒,点火x秒......), object是我希望按事件处理的目标对象的实例。
public interface TimeEvents {
public void handleTime(float secondsToEvent,Events event, Object obj);
public void resetTimer();
public void handleEvent(Events event,Object obj);
}
你在实体的render方法上调用handleTime,而事件只会在每次设置为的时间内执行..
答案 2 :(得分:0)
您可以将RunnableAction与DelayAction一起使用。以下是您将采取的步骤:
实例化RunnableAction并为其提供Runnable:
RunnableAction runnableAction = Actions.run(new Runnable(){
public void run(){
//放置你想做的任何事情
}
}
实例化DelayAction并为其提供RunnableAction:
DelayAction delayAction = Actions.delay(secondsOfDelay,runnableAction);
现在在渲染或更新方法中,你需要告诉你的delayAction'行动':
delayAction.act(△);
延迟过后,runnable中的代码应该运行。如果这种语法不完全正确,我很抱歉,这应该是最简单的方法。如果有什么东西不适合你,请告诉我,我可以提供帮助。