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

これを調べるのに3日もかかってしまった・・・・。

方法その1:CCAnimateを使う

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

流れとしては、

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

CCAnimationとCCAnimateが出てきてすごい紛らわしいですね。
違いがいまいちわかってないです・・・。

下に1.png~5.pngをループさせる時のコードを書いておきます。

initなどの初期化時に
[objc]
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];
[/objc]

実際に使うときに(update:など)
[objc]
[self runAction:self.animation];
[/objc]

方法その2:setTextureを使う

CCAnimateじゃそんなにカスタマイズできないし使いにくいよ!って人はこっちがおすすめです。

こちらは本当に画像を切り替えるだけです。
[objc]
CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:@"newImage.png"];
[self setTexture:texture];
[/objc]

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

不便を感じないのであれば、CCAnimationを使うことをお勧めします。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>