在libGDX中设置延迟

时间:2016-05-05 15:55:35

标签: java android libgdx

我现在尝试以三种不同的方式在libGDX中设置延迟。

首先我尝试使用Timer,但如果我重新启动活动,计时器将不会再次启动。使用GestureDetectorhttps://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错误?

3 个答案:

答案 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一起使用。以下是您将采取的步骤:

  1. 实例化RunnableAction并为其提供Runnable:

    RunnableAction runnableAction = Actions.run(new Runnable(){

    public void run(){

    //放置你想做的任何事情

    }

    }

  2. 实例化DelayAction并为其提供RunnableAction:

    DelayAction delayAction = Actions.delay(secondsOfDelay,runnableAction);

  3. 现在在渲染或更新方法中,你需要告诉你的delayAction'行动':

    delayAction.act(△);

  4. 延迟过后,runnable中的代码应该运行。如果这种语法不完全正确,我很抱歉,这应该是最简单的方法。如果有什么东西不适合你,请告诉我,我可以提供帮助。