ラベル sprite の投稿を表示しています。 すべての投稿を表示
ラベル sprite の投稿を表示しています。 すべての投稿を表示

2013年2月5日火曜日

Spriteの枠を回避するため、PhisicsEditorが使えないかと(未解決)

TexturePackerに加えて、PhysicsEditorを使って、Spriteのトレースをし、それによってSpriteの当たり判定を制御しようか、と検討中。
http://timroadley.com/2011/08/19/game-template-part-7-texturepacker-physicseditor/

重力などの仕組みが欲しいわけではないが、SpriteのRectangleのあまり部分が余計なので、PhisicsEditorの出番かな、と。。

研究です。

CCSpriteを配列にloop格納するために。(未解決)

arrayにCCSpriteを複数突っ込んでいこうと思って、ググった。

以下が良さそう。
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