cocos2d-x 再帰呼び出しについて
Posted: 2014年6月09日(月) 19:00
お世話になっております。
現在cocos2d-xを用いて、ゲームを制作しているのですが、
アニメーションを作ろうと、作成した関数内でCCSequenceクラスをインスタンス化しました。インスタンス化したものにデータをセットしていき、そのインスタンスは、また新しいCCsequenceクラスをインスタンス化してデータをセットするのに使うので、作成したインスタンスを同じ関数内に渡して、再帰的に呼び出しています。
そして、最終的に出来上がった、CCsequenceクラスのインスタンスをアニメーションしたいスプライトに適用させようとしました。
以下のようにコードを組みました。
デバッカでseqNにちゃんとデータがセットされているか確かめたら、
seqN
→m_pActions
→→[0] = 0x14209850(CCSequence*)
→→[1] = 0x1420a8c0(CCTargetedAction*)
のように意図した通りにデータがセットされていました。
ですが、
上記コードの①のところで再帰呼び出しをした後、seqNのアドレスを受け取ったseqの中身を確認してみたところ
先ほどまで入っていたアドレス 0x14209850 と 0x1420a8c0が無くなっていました。その代わりに、全く知らないアドレスが入っていました。
なので、ちゃんとしたseqが生成されないまま、アニメーションしたいスプライトに適用させても上手く挙動しませんでした。
アドレスが消滅する①の直前の②の部分で
Mysprite->runAction(seqN)
のようにしてみたら、アニメーションがちゃんとされました。
なので、①の部分でおかしなことになってしまったことがわかりました。
何故このようなことが起きてしまったのでしょうか?
使用している言語はC++です。
現在cocos2d-xを用いて、ゲームを制作しているのですが、
アニメーションを作ろうと、作成した関数内でCCSequenceクラスをインスタンス化しました。インスタンス化したものにデータをセットしていき、そのインスタンスは、また新しいCCsequenceクラスをインスタンス化してデータをセットするのに使うので、作成したインスタンスを同じ関数内に渡して、再帰的に呼び出しています。
そして、最終的に出来上がった、CCsequenceクラスのインスタンスをアニメーションしたいスプライトに適用させようとしました。
以下のようにコードを組みました。
//再帰関数
cocos2d::CCSequence* HelloWorld::sequencer(cocos2d::CCSequence *seq)
{
if (count != moveArray->count()){
CCSequence *seqN = CCSequence::create(seq,(CCTargetedAction*)moveArray->objectAtIndex(count),NULL);
count++;
//②
sequenser(seqN); //①
}
return seq;
}
main(){
CCSequence *resultSeq = sequencer(seed);
Mysprite->runAction(resultSeq);
}
seqN
→m_pActions
→→[0] = 0x14209850(CCSequence*)
→→[1] = 0x1420a8c0(CCTargetedAction*)
のように意図した通りにデータがセットされていました。
ですが、
上記コードの①のところで再帰呼び出しをした後、seqNのアドレスを受け取ったseqの中身を確認してみたところ
先ほどまで入っていたアドレス 0x14209850 と 0x1420a8c0が無くなっていました。その代わりに、全く知らないアドレスが入っていました。
なので、ちゃんとしたseqが生成されないまま、アニメーションしたいスプライトに適用させても上手く挙動しませんでした。
アドレスが消滅する①の直前の②の部分で
Mysprite->runAction(seqN)
のようにしてみたら、アニメーションがちゃんとされました。
なので、①の部分でおかしなことになってしまったことがわかりました。
何故このようなことが起きてしまったのでしょうか?
使用している言語はC++です。