在C ++中添加代码执行的延迟

时间:2014-07-09 19:55:22

标签: c++ cocos2d-x delay cocos2d-x-3.0

说我需要调用一个延迟2秒的函数。在cocos2d-x中,您可以使用操作:

auto action = Sequence::create(
    DelayTime::create(2), 
    CallFunc::create(
        [&]() {
            // here is the lambda function that does whatever you want after 2 seconds
        }
    ), 
    NULL
);

runAction(action);

但是为了执行操作,您需要一个Node,但并不总是可用。有些类与Node无关。 所以我想知道在C ++ 11中为代码执行添加延迟的跨平台方式是什么?

3 个答案:

答案 0 :(得分:5)

看起来这个问题已经关闭,无论如何,你可以使用Scheduler安排你的方法在Cocos2dx中随时调用。 在返回true之前的类init方法中执行类似这样的操作。

this->schedule(schedule_selector(HelloWorld::setGamePlaySpeed), .2);

并创建一个方法,将float dt作为参数,就像这样..

void HelloWorld::setGamePlaySpeed(float dt){
 // do anything yo want... This method will be Called every .2 seconds
 }

现在,float dt是您在调度程序中指定的dt时间。 希望这有助于任何人在未来寻找相同的问题...

答案 1 :(得分:0)

你可以使用usleep功能。

为此你必须包括

#include <unistd.h>

在你的班级和你需要暂停的地方,你可以像这样放置我们的睡眠功能。

usleep(5000000);

然后调用您需要运行的函数。

这将使您的游戏循环处于5秒睡眠模式。

答案 2 :(得分:-3)

您可以使用C ++ 11线程库中添加的std::this_thread::sleep_for函数:

std::chrono::seconds duration( 2 ); 
std::this_thread::sleep_for( duration ); // Sleep for 2 seconds.

这将导致当前线程在duration对象中指定的持续时间内暂停执行。