Cocos2dでCCSpriteの画像を切り替える方法

cocos2dでCCSpriteの画像を切り替えたい!って時はよくあります。 簡単&基本なことですが、日本語の情報ではなかったのでメモ。 これを調べるのに3日もかかってしまった・・・・。

方法その1:CCAnimateを使う

一連の動作をさせたい時や、ループした画像切り替え(歩く動作など)をしたいときにおすすめです。 流れとしては、

  1. 画像の名前が入った配列を作る
  2. 画像の名前からテクスチャを作り、テクスチャの配列を作る
  3. テクスチャの配列を元にCCAnimateを作る
  4. CCAnimateを元にCCAnimationを作る(場合によってはここでループ用のanimationを作る)
  5. CCAnimationを実行

CCAnimationとCCAnimateが出てきてすごい紛らわしいですね。 違いがいまいちわかってないです・・・。 下に1.png~5.pngをループさせる時のコードを書いておきます。 initなどの初期化時に

1
NSArray \*fileNames = [NSArray arrayWithObjects: @"1.png", @"2.png", @"3.png", @"4.png", @"5.png", nil]; NSMutableArray \*walkAnimFrames = [NSMutableArray array]; for(NSString \*fileName in fileNames){ CCTexture2D \* animTexture = [[CCTextureCache sharedTextureCache] addImage:fileName]; CGSize size = [animTexture contentSize]; CGRect rect = CGRectMake(0, 0, size.width, size.height); CCSpriteFrame * frame = [CCSpriteFrame frameWithTexture:animTexture rect:rect]; [walkAnimFrames addObject:frame]; } CCAnimation \*walkAnim = [CCAnimation animationWithFrames:walkAnimFrames delay:0.1f ]; CCAnimate \*animate = [CCAnimate actionWithAnimation:walkAnim restoreOriginalFrame:NO]; self.animation = [[CCRepeatForever actionWithAction:animate] retain];

実際に使うときに(update:など)

1
[self runAction:self.animation];

方法その2:setTextureを使う

CCAnimateじゃそんなにカスタマイズできないし使いにくいよ!って人はこっちがおすすめです。 こちらは本当に画像を切り替えるだけです。

1
CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"newImage.png"]; [self setTexture:texture];

一見すると書く量がすごい少ないように思えますが、実際はこれの他に状態を管理するために変数を追加したり、その状態を条件に応じて変化させなければいけなかったりと、この部分以外の所で結構長くなってしまいます。 不便を感じないのであれば、CCAnimationを使うことをお勧めします。