2014年9月23日火曜日

cocos2d-xのrunActionメソッドを使って遅延実行処理を簡潔に書く

cocos2d-xで一定時間後に何か処理を行わせたい時、方法はいろいろあると思いますが、簡単な方法として、NodeクラスのrunActionメソッドとラムダ式を使えば簡単に記述できました。

テスト環境
  • Mac OS X 10.9.5
  • cocos2d-x v3.2


Node、Layer、Spriteなどのサブクラスのメソッドの中でのコードを想定すると、以下のように書くことができます。
this->runAction(Sequence::create(DelayTime::create(0.5f), CallFunc::create([=](){
  // (例) 0.5秒後に行わせたい処理
  auto sprite = Sprite::create("sprite.png");
  sprite->setPosition(this->getContentSize()*0.5f);
  this->addChild(sprite);
}), nullptr));
0.5秒に設定したDelayTimeインスタンスと、CallFuncインスタンスをSequenceでくるんで、お馴染みのrunActionメソッドに送ってやります。
CallFuncには実行するメソッド名を指定する方法もありますが、ここではラムダ式を使って実行コードを記述しています。

ラムダ式は次のような形が基本となります。
[キャプチャ](引数){
  // 実行コード
}
ラムダ式については、以下の記事の解説がとても分かりやすかったです。

キャプチャとはラムダ式内部の実行コードから、外部の変数などにアクセスする方法で、「参照(&)」や「コピー(=)」などを選択できます。
うっかりローカル変数をラムダ式の中で参照アクセスすると、とんでもない事態が起きるので、キャプチャに参照(&)を指定する場合は注意が必要です。

上記の例では、コピー(=)を指定しているので、ラムダ式からローカル変数にアクセスする場合は、コピーされた値が使われます。

関連記事

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...