2016-10-17 3 views
1

私のV1 cocos2d-xアプリをV3にアップデートしていますが、コールバックが発生しています。私はこのようなラムダとコールバックを行うことができますcocos2d-x v3パラメータ/変数としてCallFuncを使用する

、正常に動作します -

auto mcb = CallFunc::create([this](){ 
    this->doCallback(kEVENT_MENU_IS_ONSCREEN); 
}); 

hex->runAction(Sequence::create(somethingthattakestime, mcb, NULL)); 

しかし、私は、関数にCallFunc変数を渡す私のオブジェクトに格納し、その後、使用/いくつかでそれを呼びたいです将来のポイント。関数内

item->callfunc = callfunc; 

- -

シンプルで設定
CallFunc * callfunc; 

- 私が定義クラスにおいて

void LBMenuAddMenuItemName(CallFunc * callfunc); 

私もそうstaticとしてCallFunc変数を宣言ハングする -

私はこれを使用したいとき

その後、私がやる -

Sequence * seq = Sequence::create(callfunc,NULL); 
somesprite->runAction(seq); 

はしかし、これはSIGSEGV(GLTHREAD)とひどく終了します。

typeid(callfunc).name()を使用すると、callfuncがCallFuncであることが示されます。宣言でsetTag(69)を使用してから、SIGSEGVの前にgetTag()を実行すると分かりやすい値が返されません。

私が間違っていることと遅延コールバックの正しい方法を説明できる人はいますか?

ありがとうございました!

LB

答えて

0

しようとした多くのものは、私が行うときにこのエラーが表示されなくなり見つけ宣言の後に「()を保持」 -

doSoloPlay->retain(); 

これは、参照カウントが増加します。

私はこれがなぜ必要なのかよくわかりません。私の推測では、cocos2d-xクラスは賢明なガーベッジコレクションを行うかもしれないということですか?

0

コールバックとして後で関数を呼び出す場合は、コールバックを保存して適切なタイミングで解放する必要があります。

静的宣言は、CCCallFuncのアドレスのみを保存しますが、実行する前にクラスは破棄されます。

関連する問題