0

我有一个带有移动动作的精灵,我想在精灵完成移动动作时调用一个带有 3 个参数的函数,我尝试使用CC_CALLBACK_3CallFuncN 但我不知道我把参数放在哪里。

4

1 回答 1

3

您不应该使用 CC_CALLBACK_3,而是使用 CC_CALLBACK_1:

void callfunc1(Node* pSender, int i, int j, int k);
sprite->runAction(CallFuncN::create(CC_CALLBACK_1(HelloWorld::callfunc1, this,1,2,3)));

当你看一下 CallFuncN 的创建函数时:

static CallFuncN * create(const std::function<void(Node*)>& func);

它接收一个只有一个参数的 std::function。

因此,您应该使用 CC_CALLBACK_1 将具有 3 个或更多参数的函数重新绑定到只接受一个参数的方法,并且唯一的一个参数必须是 Node* 及其子类型。

在 CallFuncN 示例中,cocos2d-x 引擎会将精灵作为第一个参数传递给 callfunc1 方法。所以你只需要关心传递剩余的参数。

顺便说一句,您不必使用 CallFuncN 和 CallFuncN 类限制您定义一个方法,其第一个参数必须是 Node* 及其子类型,您也可以使用 CallFunc,这是代码片段:

void callfunc2(Node* pSender, int i, int j);
sprite->runAction(CallFunc::create(CC_CALLBACK_0(HelloWorld::callfunc2, this,sprite,1,2)));

这一次,我们将“sprite”作为第一个参数传递给“callfunc2”方法。

于 2014-12-29T02:18:59.630 回答