0

メインループアニメーションを実行するための最も賢い方法のヒントを与えることができる人はいますか?アニメーションをフレームごとに制御したいので、CCAnimationを使用したくありません。

個々のフレームのスプライトレクト(スプライトシートに対して)を配列に格納してから、各アニメーションステップで適切なレクトを検索しますか?CCAnimationでこれがどのように行われるかを調べようとしましたが、成功しませんでした...

  1. 初期化時に各フレームのrectを取得するにはどうすればよいですか?
  2. 各アニメーションステップでrectを設定するにはどうすればよいですか?
  3. CCSpriteBatchNodeを使用する必要がありますか?私はそうは思いませんね?
4

3 に答える 3

0

CCAnimationを使用したくない理由を理解することはできませんが、とにかく、質問に対する回答を得るために、CCSpriteインスタンスの作成コードを確認できます。次に、CCSpriteFrameインスタンスの作成を確認します。そこに、少なくとも最初の質問に対する答えがあります。

実際、CCAnimateとは異なる方法でアニメーションフレームを管理したい場合は、CCSpriteFrameの配列を保存して、必要に応じて表示できます(CCAnimateアクションでは、これらのフレームは同じ時間間隔で1つずつ変更されます)。

また、アニメーションの複数のフレームを表示したくない場合は、CCSpriteBatchNodeを使用するかどうかに違いはありません。1つのテクスチャの複数の部分を描画する必要がある場合は、これらすべてのスプライトにメッセージをdraw送信するのではなく、1回の呼び出しで描画するため、プロセッサ時間を大幅に節約できます。draw

于 2012-10-29T12:08:27.793 に答える
0

スプライトをフレームごとにアニメーション化する必要があるため、CCSpriteBatchNodeを使用すると、アニメーションにフレームごとにアクセスできるため、より良いオプションになると思います。「Zwoptex」などのツールを使用してスプライトのplistを作成すると、CCSpriteBatchNodeを使用してアニメーション化する効率的な方法が得られます。

CCSpriteBatchNodeでplistファイルを使用したアニメーションを知っていることを願っています。

于 2012-10-29T11:58:13.137 に答える
0

私はモリオンの答えからインスピレーションを得て次のことをしました:ゲームのダニ機能では:

_animationFrames.legFrame = (_animationFrames.legFrame + 1) % _animationFrames.legFrames.count;

[_legs setDisplayFrame:  [_animationFrames.legFrames objectAtIndex: _animationFrames.legFrame]];

そして、init関数では:

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode
                                  batchNodeWithFile:@"Player.png"];
[self addChild:spriteSheet];

_animationFrames.legFrames = [[NSMutableArray array] retain];
for(int i = 0; i <= 15; ++i)
{
  [_animationFrames.legFrames addObject:
   [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:
    [NSString stringWithFormat:@"Player_legs-%d.png", i]]];
}

_legs = [CCSprite spriteWithSpriteFrameName:@"Player_legs-0.png"];
[_sprite addChild: spriteSheet];
[spriteSheet addChild:_legs z:1];
于 2012-10-29T13:01:59.980 に答える