0

在 cpp 中:

void Character::jump(CCLayer *layer){
    if (this->isAnimationPlaying) return;
    up_or_down = UP;
    body->runAction(CCSequence::actions(
                                        CCMoveBy::actionWithDuration(0.5, ccp(0, 50)),
                    CCCallFuncND::actionWithTarget(body, callfuncND_selector(Character::upDownDone), this),
//                                        CCCallFuncN::actionWithTarget(body, callfuncN_selector(Character::upDownDone)),
                    NULL));
    this->isAnimationPlaying = true;
}

void Character::upDownDone(CCNode *node, CCObject *ob){
   this->isAnimationPlaying = false;   // *this is different from the this(class instance) in jump method, seems this in upDownDone is a new created instance*
}

那么如何在回调方法中获取类实例呢?我可以为主类实例和回调的类实例做同样的事情吗?

编辑:

Character 是一个没有父类的类,body 是一个成员变量,是 CCSprite 的一个实例。

谢谢。

4

2 回答 2

1

因为你是body用来调用函数的Character::upDownDone

你应该用this它来调用它。

CCCallFuncND* callFunc = CCCallFuncND::actionWithTarget(first_arg, secend_arg, third_arg);
body->runAction(callFunc);

假设你secend_argcallfuncND_selector(Character::upDownDone)

然后,

first_arg调用者,即。在您的代码中调用此函数的类实例是body. 但实际上它应该是this,或者 Charactor 类的任何实例

(传递给您的调用函数的CCNode* node第一个参数)是动作运行器,即。body在你的代码中。因为你正在使用body->runAction()

(传递给调用函数的CCObject* obj第二个参数)是一个 void 指针,与third_arg.

另一种方法是使用

void Character::upDownDone(CCNode *node, void *ob){
    (Character*)ob->isAnimationPlaying = false;
}
于 2012-11-08T06:03:25.700 回答
0

似乎您使用实例“body”而不是 this 来调用 Character::upDownDone 方法。也许您想要这个:

CCCallFuncND::actionWithTarget(this, callfuncND_selector(Character::upDownDone), body),
于 2012-11-08T06:04:17.650 回答