cocos2d の Spritesheet の Retina 対応
cocos2d ではメモリ効率よく画像リソースをあつかうために以下のような CSS Sprite っぽい画像に複数リソースを格納して使うことができる。
cocos2d 自体は 0.99.5 から Retina 対応するようで、通常の画像ファイルなら -hd.png
のような suffix で画像を置いておけば自動的にそいつが使われるようになった。
スプライトシートでの対応方法が見つけられなかったので、いろいろ試してみた。
結論から書くと、
- time_num.png
- time_num-hd.png
- time_num.plist
- time_num-hd.plist
とそれぞれファイルを作成する。plist のなかのファイル名は -hd
ありなしに関わらずどちらもおなじ物を指定する必要がある。
そのうえで、
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"time_num.plist"];
CCSpriteBatchNode* time_num = [CCSpriteBatchNode batchNodeWithFile:@"time_num.png"];
[self addChild:time_num];
CCSprite* time = [CCSprite spriteWithSpriteFrameName:@"time_num1.png"];
time.position = ccp(160, 240);
[self addChild:time];
などとすればいいようだ。座標系をただ倍にすればいいような単純な高解像度画像のためにもわざわざ別途plistを用意してあげなければいけないのが若干めんどくさい。
plist 作成が面倒な場合、
CCTexture2D* texture = [[CCTextureCache sharedTextureCache] addImage:@"time_num.png"];
CCSpriteFrame *frame = [CCSpriteFrame frameWithTexture:texture rect:CGRectMake(0, 0, 10, 14)];
というような感じでテクスチャを自前で切り出して使うことも可能のようだが、こっちのほうがコードが煩雑になりそう。
(0.99.5-rc1 でためしてます)