说我需要调用一个延迟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中为代码执行添加延迟的跨平台方式是什么?
答案 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
对象中指定的持续时间内暂停执行。