我有一个带有移动动作的精灵,我想在精灵完成移动动作时调用一个带有 3 个参数的函数,我尝试使用CC_CALLBACK_3
,CallFuncN
但我不知道我把参数放在哪里。
问问题
2355 次
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 回答