TexturePackerに加えて、PhysicsEditorを使って、Spriteのトレースをし、それによってSpriteの当たり判定を制御しようか、と検討中。
http://timroadley.com/2011/08/19/game-template-part-7-texturepacker-physicseditor/
重力などの仕組みが欲しいわけではないが、SpriteのRectangleのあまり部分が余計なので、PhisicsEditorの出番かな、と。。
研究です。
臆面もなくド素人ぶりを晒しながら、 iOS(Mac)上で実現したいものを創っていくための学習メモブログです。web上の参考資料は英語が多いので、英語の世界に迷い込んで試行錯誤。がむばろうニッポン。 (誤謬がありましたら、コメント等でお教え下さい)
2013年2月5日火曜日
CCSpriteを配列にloop格納するために。(未解決)
arrayにCCSpriteを複数突っ込んでいこうと思って、ググった。
以下が良さそう。
http://www.cocos2d-iphone.org/forum/topic/30297
CCArrayを作っておいて、
addObject:していって、
(CCSprite*)でCCSpriteオブジェクトとして配列から取得、と。
それで、
さて、やってみよう。
:::::::::::::::::::::::::::::::
というわけで、小さな丸「comal」を複数突っ込んだspriteAtlasをTexturePackerでつくって、以下のようなコードを書き書き。
が、上記を参考にした配列を使ってみると、エラーで止まるので、要調査。
まだ、CCArrayについて、よく分かっていないようです。自分。
以下が良さそう。
http://www.cocos2d-iphone.org/forum/topic/30297
CCArray *spriteArray = [CCArray arrayWithCapacity:10];
for (int i = 0; i < 10; i++) {
[spriteArray addObject:[CCSprite spriteWithFile:@"test.png"]];
}
// Retrieve reference
CCSprite *sprite = (CCSprite*)[spriteArray objectAtIndex:i];
なるほど。CCArrayを作っておいて、
addObject:していって、
(CCSprite*)でCCSpriteオブジェクトとして配列から取得、と。
それで、
NSString *name = [NSString stringWithFormat:@"sprite%d", i];
[spriteArray addObject:[CCSprite spriteWithFile:name]];
こんな感じで、連番にした名前から配列を生成できるだろうか。さて、やってみよう。
:::::::::::::::::::::::::::::::
というわけで、小さな丸「comal」を複数突っ込んだspriteAtlasをTexturePackerでつくって、以下のようなコードを書き書き。
CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache];[cache addSpriteFramesWithFile:@"comalAtlas.plist"];for(int i=1;i<7;i++){NSString *name=[NSString stringWithFormat:@"comal%d.png",i];CCSprite *comal = [CCSprite spriteWithSpriteFrameName:name];comal.position=ccp(100*i,100*i);[self addChild:comal];
}
無事、表示されました。
が、上記を参考にした配列を使ってみると、エラーで止まるので、要調査。
まだ、CCArrayについて、よく分かっていないようです。自分。
TexturePacker生成画像の表示メモ。

TexturePackerを使って、右画像のように、複数画像を配置した透過PNG画像と、plistの二ファイルを生成してもらい、Resourcesに登録した。
が、どうやってtextureから表示して良いか分からず、色々調べるも、古い情報などが多く、実装に時間がちょっとかかったので、メモ。
以下のように、
1:まず、CCSpriteFrameCacheをsharedSpriteFrameCacheでつくる。
2:次に、cacheにspriteFramesWithFile:でplistファイルを追加。
3:そして、spriteにspriteWithSpriteFrameName:で、PNGファイル名を記述。
CCSpriteFrameCache *cache = [CCSpriteFrameCache sharedSpriteFrameCache]; [cache addSpriteFramesWithFile:@"spriteAtlas.plist"]; CCSprite *sprite = [CCSprite spriteWithSpriteFrameName:@"sprite.png"]; sprite.position=ccp(100,100); [self addChild:sprite];
これで、無事表示されました。
Kobold2d 2.0.4、Cocos2d 2.0 にて。
透過PNGは「アルファチャンネルを選択」
透過PNG画像をFireworksで作成して、以下のような白い部分が周辺に残った。
青い方は残り、赤い方はない。
どうしてか、調べてみると、
「インデックス透明カラー」にした場合、白い枠が残るとわかり、
「アルファチャンネル」を選択すると大丈夫だった。
透過PNGは「アルファチャンネルを選択」が、肝要の様子。
はい、綺麗になりました。
2013年2月4日月曜日
CCSpriteBatchをやっと使ってみた。確かにメモリ消費が減る。
やっとCCSpriteBatchを実装してみた。
同一で大量のspriteを描画する際に、メモリの圧迫がかなり抑えられ、便利。
(延々、大量に描画し続けたら、途中から描画してくれなくなりましたが、自動的にsprite量は補充されるようです。Kobold2dの仕様かな?Cocos2dかな。私は今、Kobold2dを使っているので、Cocos2dの仕様とちょっと違ったことを書くことがあるかもしれません。)
CCSpriteBatch *batch = [CCSpriteBatchNode batchNodeWithFile:@"test.png"]; [self addChild:batch];CCSprite *sp = [CCSprite spriteWithTexture:batch.texture];
sp.position=ccp(100,100);
[batch addChild:sp z:1 tag:1];
バッチをまず画像ファイルをもって準備しaddChildして、
CCSpriteをそのバッチのテクスチャから作成し、
もう一度batchにaddChildeする、というやり方の様子。
[self addChild:batch];しても、別にまだ何も起きず、
spriteをつくって、さらにbatch addChild:spriteする、というのは、
若干面倒なようですが、メモリ消費を抑え、ありがたい限り。
batchというのは、バッチファイル、みたいな感じで、「ひとまとまり」「塊」といった意味ですね。
やっと使えました。
ファイル画像を、sprite atlasにすれば、読み込み部分の画像ファイル名を指定してやることで、同一ファイルから違う部分を読み込み、別画像として使え、メモリ消費は抑えられる、という優れもの。
今度は、それに取り組みます。
TexturePackerというツールも手に入りましたので。
取り組みました→ http://learning-iphoneapp.blogspot.jp/2013/02/texturepacker.html
取り組みました→ http://learning-iphoneapp.blogspot.jp/2013/02/texturepacker.html
登録:
投稿 (Atom)


