xcode プロジェクト設定をアーキテクチャごとに変えるには?

cocos2d のテンプレートでプロジェクトつくると、

スクリーンショット(2010-11-23 8.58.53)

こんな感じで、ARMv6 と ARMv7 で設定を変えててへーっておもったけど。これって GUI から設定できない気がするんだけど、どうやってやるんだろ??

by typester / at 2010-11-23T09:00:00 / cocos2d · iphone · xcode / Comment

CCRepeatForever は CCSequence の中では使えない

やろうとしたら BAD_ACCESS になった。

prog_guide:actions_composition - cocos2d for iPhone

IMPORTANT: CCRepeatForever is not a valid CCIntervalAction. You can't use a CCRepeatForever inside a CCSequence action.

らしい。

導入アニメしたあと、ループさせたいような場合はよくあるからこれできないと不便なきもする。

そう言うことがしたい場合は CCCallFunc でアニメーションの終了をもらいそこで CCRepeatForever する。CCCallBlock っていう Blocks インタフェースあるからそれ使えばメソッド増やさなくてもいいようだ。

by typester / at 2010-11-19T23:23:00 / iphone · cocos2d / Comment

cocos2d の Spritesheet の Retina 対応

cocos2d ではメモリ効率よく画像リソースをあつかうために以下のような CSS Sprite っぽい画像に複数リソースを格納して使うことができる。

time_num

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 でためしてます)

by typester / at 2010-11-18T14:34:00 / iphone · cocos2d / Comment