我可以使用cocos2d-x调度程序来延迟一行代码吗?

时间:2013-11-26 01:06:01

标签: c++ timer cocos2d-x sleep schedule

我基本上试图将对象的修改延迟10秒。

这是我认为可行的方法:

this->scheduleOnce(schedule_selector(customer->setBusy(false)), 10000);

但是我收到编译错误:

Lvalue required as unary '&' operand

是否有一种简单的方法可以延迟一行代码?也许只使用c ++命令会更有效率,但sleep命令也会给我带来问题。

4 个答案:

答案 0 :(得分:5)

你需要写这样的schedulelarOnce

在.h文件中声明

void myModification(float dt);

在.cpp文件中

this->scheduleOnce(schedule_selector(&MyClass::myModification), 10.0f);

void Myclass::myModification(float dt)
{
//your code
}

所有这些都在cocos2d-x 2.2

答案 1 :(得分:2)

您需要从该单行代码中创建一个函数,因为您无法将值传递给选择器函数。所以像这样:

this->scheduleOnce(schedule_selector(MyClass::myModification), 10.0f);

然后你会有一个带有修改代码的函数。

void MyClass::myModification(float dt)
{
    customer->setBusy(false);
    // Whatever other stuff you want run.
}

此外,结束时的延迟以秒为单位,而不是毫秒。所以你可能要等几个小时才能运行。

答案 2 :(得分:2)

如果您的类派生自Node,您还可以通过创建回调并在序列中调用它来实现此目的。如果您需要创建操作链或将游戏事件与操作序列同步,则这是一种有用的模式。 (科科斯版本3 +)

const float myDelay = 1.0f;
this->runAction( Sequence::create(
                                  DelayTime::create(myDelay),
                                  CallFunc::create(CC_CALLBACK_0(MyClass::MyFunction, this)),
                                  nullptr));

答案 3 :(得分:0)

this-> scheduleOnce它只能使用自己的方法