1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[cocos2dx]runActionから他のNodeのActionを呼び出す

Last updated at Posted at 2016-09-14

サンプル

// NG

Node* nodeA;
Action* actionA = Sequence::create(...);

Node* nodeB;
Action* actionB = Sequence::create(...,
  CallFunc::create[nodeA, actionA](){
    nodeA->runAction(actionA);
  }),
  nullptr);

nodeB->runAction(actionB);

// OK

Node* nodeA;
Action* actionA = CallFunc::create([nodeA](){
  nodeA->runAction(Sequence::create(...));	
});

Node* nodeB;
Action* actionB = Sequence::create(..., actionA, nullptr);
nodeB->runAction(actionB);

解説

NGパターンでは、actionAがスコープを抜けたタイミングで、リリースされてしまうため、actionB内でいざ実行しようとした時には、存在が抹消されています。

別解

NGパターンのactionAを作ったタイミングで、
actionA->retain();
しておく方法もあるかと思いますが、releaseするタイミングが難しい気がしたので、未検証です。

(actionAが呼ばれてrunActionされた後であれば、確実に呼ばれるタイミングでreleaseしておけば大丈夫かも?)

いずれにせよ、メモリリークの危険を生まない方法で実装できるならそれに越したことがないと思います。まる。

1
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?