アクションにひも付けてメソッドを実行
アクションにひも付けてメソッドを実行するというのは具体的には、
・オブジェクトのアクションに合わせて効果音を鳴らす。
・オブジェクトのアクションにひも付けて何らかのフラグを立てる。
・オブジェクトが弾を発射するなどの、CCMoveTo
CCScaleBy
CCRotateBy
等では表現できない複合的なアクション。
というような場合に使います。
このような場合、以下の4つのうちいずれかを利用します。
public CCCallFunc(Action selector); public CCCallFuncN(Action<CCNode> selector); public CCCallFuncND(Action<CCNode, object> selector, object d); public CCCallFuncO(Action<object> selector, object pObject);
では、それぞれの使い方を見ていきましょう。
CCCallFunc … 引数なしの callback を実行する。
public CCCallFunc(Action selector);
(例)ステージ1クリアのフラグを立てる
var isFirstStageClearToTrue = new CCCallFunc(() => { this.IsFirstStageClear = true; }
これは結構使います。特に前回の CCSequence と組み合わせて使うことが多いです。
CCCallFuncN … アクションが実行される CCNode を引数とした callback を実行する。
public CCCallFuncN(Action<CCNode> selector);
(例)ボスを倒したアクションを発動し、BGMを停止し、ボスを倒したSEを鳴らす。
var bossDefeated = new CCCallFuncN(node => { CCMoveTo bossDefeatedAction = new CCMoveTo(3f, new CCPoint(node.PositionX, node.PositionY - 1000f)); CCSimpleAudioEngine.SharedEngine.StopBackgroundMusic(); CCSimpleAudioEngine.SharedEngine.PlayEffect("Audio/SE/BossDefeated.xnb"); node.RunAction(bossDefeatedAction); });
これも結構使います。同様に前回の CCSequence
と組み合わせて使うことが多いです。
CCCallFuncND … アクションが実行される CCNode および、任意のオブジェクトを引数とした callback を実行する。
public CCCallFuncND(Action<CCNode, object> selector, object d);
(例)ボスを倒したアクションを発動し、BGMを停止し、bossDefeatedSeFile
で指定されたSEを鳴らす。
var bossDefeated = new CCCallFuncND((node, fileName) => { CCMoveTo bossDefeatedAction = new CCMoveTo(3f, new CCPoint(node.PositionX, node.PositionY - 1000f)); CCSimpleAudioEngine.SharedEngine.StopBackgroundMusic(); CCSimpleAudioEngine.SharedEngine.PlayEffect((string)fileName); node.RunAction(bossDefeatedAction); }, bossDefeatedSeFile );
実際にはこれは使ったことがないですね(笑)
CCCallFuncO… 指定した pObject を引数とする callback を実行する。
var CCCallFuncO(Action<object> selector, object pObject);
(例)う~ん、CCCallFuncO
を効果的に使用できる状況が思いつきません!
正直 CCCallFuncO
は、使わないですね…
CCCallFunc
と CCCallFuncN
を使いこなせればほぼ思い通りの動作ができると思います。
というわけで、今回はここまでです。