cocos2dでCCSpriteの画像を切り替えたい!って時はよくあります。 簡単&基本なことですが、日本語の情報ではなかったのでメモ。 これを調べるのに3日もかかってしまった・・・・。
方法その1:CCAnimateを使う
一連の動作をさせたい時や、ループした画像切り替え(歩く動作など)をしたいときにおすすめです。 流れとしては、
- 画像の名前が入った配列を作る
- 画像の名前からテクスチャを作り、テクスチャの配列を作る
- テクスチャの配列を元にCCAnimateを作る
- CCAnimateを元にCCAnimationを作る(場合によってはここでループ用のanimationを作る)
- CCAnimationを実行
CCAnimationとCCAnimateが出てきてすごい紛らわしいですね。 違いがいまいちわかってないです・・・。 下に1.png~5.pngをループさせる時のコードを書いておきます。 initなどの初期化時に
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:など)
[self runAction:self.animation];
方法その2:setTextureを使う
CCAnimateじゃそんなにカスタマイズできないし使いにくいよ!って人はこっちがおすすめです。 こちらは本当に画像を切り替えるだけです。
CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"newImage.png"]; [self setTexture:texture];
一見すると書く量がすごい少ないように思えますが、実際はこれの他に状態を管理するために変数を追加したり、その状態を条件に応じて変化させなければいけなかったりと、この部分以外の所で結構長くなってしまいます。 不便を感じないのであれば、CCAnimationを使うことをお勧めします。