2012-01-30 7 views
1

可能な限りお手伝いください。私は、複数のCCSpriteBatchNodeオブジェクトをロードし、座標を変更してフレームを回転させて、アニメーション化されているかのように見えるゲームを構築しています。私はすでに1つの座標から別の座標に1つのCCSpriteBatchNodeオブジェクトを移動することを達成しており、アニメーション化されています。もう1つの非常に異なるアニメーションを実行し、別のスプライトシートファイルを読み込んで別の場所に移動する必要があります。どうすればいいですか?複数のスプライトシートをcocos2Dに追加してスプライトのように見えるようにするにはどうすればいいですか?

これは、これまでの私のコードです:あなたがそれぞれの新しいCCSpriteBatchNodeを作成する必要が

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"PotkaEntry.plist"]; 

CCSpriteBatchNode *spriteSheet = [CCSpriteBatchNode batchNodeWithFile:@"PotkaEntry.pvr.ccz"]; 

[self addChild:spriteSheet]; 

NSMutableArray *entryAnimFrames = [NSMutableArray array]; 

for(int i = 1; i<=12; i++) 
{ 
    [entryAnimFrames addObject:[[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:[NSString stringWithFormat:@"Potka_entry%d.png", i]]]; 
} 

CCAnimationCache *entryAnim = [CCAnimation animationWithFrames:entryAnimFrames delay:0.08f]; 

CGSize winSize = [CCDirector sharedDirector].winSize; 

self->_body1 = [CCSprite spriteWithSpriteFrameName:@"Potka_entry1.png"]; 

_body1.position = CGPointMake(winSize.width/2, 0); 

self.walkAction = [CCRepeatForever actionWithAction:[CCAnimate actionWithAnimation:entryAnim restoreOriginalFrame:NO]]; 

[_body1 runAction:_walkAction]; 

_body1.scale = 0.4; 

[spriteSheet addChild:_body1]; 

id entryAction = [CCMoveTo actionWithDuration:5.0f position:ccp(winSize.width/2,60)]; 

[_body1 runAction:entryAction]; 
+0

なぜ別のCCSpriteBatchNodeを作成しないのですか?あなたが持っている問題は何ですか? – FBryant87

+0

同じCCSpriteBatchNodeオブジェクトと同じCCSpriteFrameCacheオブジェクト内の別のスプライトフレーム(.plistファイル)に別のスプライトシート(別の.pvr.cczファイルのように)をロードする方法を聞いていますか? もし私があなたのやり方をすれば、別のものをロードする前に現在のCCSpriteBatchNodeオブジェクトを削除すべきですか?前もって感謝します。 – Shahnawaz

答えて

5

は、使用spritesheet(spritesheetでIが結合pvr.cczファイルとの.plistファイルを意味する)

CCSpriteFrameCacheは、すべてのシーンとクラスで共有される単一のキャッシュです。あなたは、このメソッドを呼び出すとき:新しいCCSpriteFrameCacheオブジェクト毎回行っていない

[CCSpriteFrameCache sharedSpriteFrameCache] 

を、ちょうどONEインスタンスが存在します。ロードしたすべてのスプライトシートをこの単一のキャッシュに格納します。

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sheet1.plist"]; 
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"sheet2.plist"]; 

あなたは、各spritesheetためCCSpriteBatchNodeを作成する必要があり、あなたはバッチノードに複数のシートを持つことはできません:だから、そのようにキャッシュに2 spritesheetsを読み込むことができ

​​

あなたは必要に応じて、これらのバッチノードの両方をレイヤーに追加することができます。バッチノードに追加されるスプライトは、バッチノードが使用しているスプライトシートからのものでなければなりません。

+0

これらの概念を私に明らかにしてくれてありがとう。あなたに時間があるなら、もう一つ質問があります。私はこれを実装するのに苦労しています。 spriteSheet1が(10,10)になり、消えてspriteSheet2に置き換えられるとしましょう。このコードを使用すると、スプライト全体が最初から完全に消え、まったく表示されません。 '[spriteSheet1 removeFromParentAndCleanup :YES]; ' – Shahnawaz

関連する問題