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_argあなたがいると仮定しますcallfuncND_selector(Character::upDownDone)

それから、

これfirst_argは呼び出し元です。コード内でこの関数を呼び出すクラス インスタンスはbody. しかし、実際にはthis、または Character クラスの任意のインスタンスである必要があります

the CCNode* node(呼び出し関数に渡された最初のパラメタ) はアクション ランナーです。bodyあなたのコードで。使っているからbody->runAction()

the CCObject* obj(呼び出し関数に渡された 2 番目のパラメーター) は void ポインターであり、 とまったく同じthird_argです。

別の方法は使用です

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

this の代わりにインスタンス「body」を使用して Character::upDownDone メソッドを呼び出しているようです。

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