1

cocos2D で繰り返されないアクションを使用している場合、そのアクションを再開するにはどうすればよいですか?

私はコードを使用しています:

 CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

 [mySprite runAction: action];

アクションは一度は正常に実行されますが、イベントがトリガーされると、アクションが終了するまでアクションを再度実行できるようにしたいので、イベントがトリガーされたときにこれを使用してみました。

 if( [action isDone] ){

     [mySprite runAction: action];

 }

しかし、これはクラッシュを引き起こします。これを行う正しい方法は何ですか?

4

3 に答える 3

2

アクションをインスタンス変数に保存してみてください。ヘッダー ファイルでポインターが宣言されている

CCAction* myAction;

次に、レイヤーまたはスプライトが初期化されるとき

myAction = [CCAnimate actionWithAnimation:myAnimation];

どの時点から、アクションを呼び出したいときはいつでも

if( [action isDone] ){

 [mySprite runAction: myAction];

}

アプリがクラッシュする理由は、初期化されたメソッドの期間中のみ存在するアクションを呼び出しているためだと思います。

私のゲームでは CCSequences を使用しています (したがって、CCCallFunc を使用してアニメーションの途中で変数を設定/宣言できます)。これらの CCSequences はすべて、私の CCSprite サブクラスにインスタンス変数として保存されます。

永遠に繰り返されるアイドルアニメーションがあります。

たとえば、「ジャンプ」したいときはいつでも呼び出します

[self stopAllActions];
[self runAction:jumpSeq];

私の jumpSeq は、ジャンプ アニメーションを再生する CCSequence であり、完了時にアイドル アニメーションを再開するシーケンスの最後に CCCallFunc があります。

お役に立てれば。

さらに読む: http://www.cocos2d-iphone.org/wiki/doku.php/prog_guide:actions_special?s[]=cccallfunc

于 2010-08-12T08:39:46.780 に答える
0

ヘッダーファイルで CCAction* myAction を宣言したのと同じ問題がありましたが、別のメソッドから呼び出すとクラッシュが発生しましたが、@Bongeh のように [myAction 保持] を使用するときに言及したように、完全に機能しました

于 2011-12-08T01:02:39.410 に答える
0

私はアクションを保持していなかったことが判明し、スプライトはアクションが完了するとそれを削除していたに違いありません. だから今私のコードは;

  CCAnimate* action = [CCAnimate actionWithAnimation:myAnimation];

  [mySprite runAction: action];

  [action retain];

そして、もう一度実行したいとき。

 if( [action isDone] ){

      [mySprite runAction: myAction];

 }
于 2010-08-12T19:55:50.663 に答える