私がcocos2dについて知ったことによると、 SpriteFrameCacheとSpriteBatchNodeは同じ結果を持ちますが、使用方法が異なり、ゲームが非常に大きい場合はわずかなパフォーマンスの差に気づくことがあります。
CCSpriteFrameCacheは、plistファイル与えられた。 plistに関連付けられたアトラスもプロジェクトに追加する必要があります。そうしないとフレームが呼び出されますが、描画されるものは何も見つかりません。 Plistは、画像アトラスの中に画像がある場所のアドレスに似ています。 CCSpriteFrameCacheの優れた点は、コードがきれいで、CCSpriteBatchNodeメソッドよりも小さく、そのフレームの呼び出しごとに、その特定のアトラスに行き、描画するというコストです。
一方、CCSpriteBatchNodeは、アトラスをロードして1回の描画呼び出しでロードします。これは、ゲームで必要に応じてドローが行われなければならない時間を減らすので効率的です。唯一の難点は、アトラスの各スプライトの四角形の計算を行う必要があることです。これは、あなたのアトラスが文字の2つのアクションであり、アトラス画像ファイルのサイズが1024x1024で、各スプライトのサイズが128x128であるためです。だから、ジャンプアクション全体の各矩形を得るために数学をやることになります(これは、このような数学を避けるために便利です。 1回のコールで、パフォーマンスに賢明なコールを発信します。 CCSpriteBatchNodeを使用する別の方法は、異なる静的スプライトを持つことです。複数の静的イメージまたはスプライトに対して1回の描画呼び出しを行うだけです。
サンプルコードが必要な場合は、私はそれを提供して喜んでいるでしょう。
更新:SpriteBatchNodeへのリンクの追加と私自身の例。
SpriteBatchNode:
Example using SpriteBatchNode with Ray Wenderlich 私はこの男を信じて、私は彼のチュートリアルからCocos2dの多くを学びました。他のチュートリアルを読むことをお勧めします。
簡潔に言えば、CCSpriteBatchNodeは、CCSpriteFrameCacheを使用した場合とまったく同じプロセスであり、CCSpriteBatchNodeをレイヤーではなくCCSpriteBatchNodeに追加するのと同じですが、レイヤーにCCSpriteBatchNodeを追加します。 これは、Cocos2dの新しい人たちが絡み合うという難しいコンセプトです。
SpriteFrameCache:私はここで良い例を見つけることができませんでした
SpriteFrameCacheは1単純なものです。
//By doing this your sprites are now in the cache ready to be used
//by their names declared in the .plist file.
-(void) loadingSprites:(NSString*) plistName {
[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:plistName];
}
-(id)initGameLayer {
//CCSprite accepts CCSpriteFrame and your img is now ready to be displayed.
//However is still not drawn yet.
CCSprite * mySprite = [[CCSpriteFrameCache sharedSpriteFrameCache] spriteFrameByName:framename];
//set a position if desired
//20 pixels to the right and 0 pixels to the top.
mySprite.position = CGPointMake(20,0);
//Now the Image has been drawn, making 1 draw call.
[self addChild:mySprite];
}
しかしbatchnodeに追加されているすべてのスプライトが同じSpriteAtlasの一部でなければならない、CCSpriteBatchNodeはちょうど1 drawcallを作ることを指摘することは注目に値します。
そしてSpriteFrameCacheを使用してのみ、その簡単かつシンプルな、しかし、すべての子供が、それは+1ドローコールが行われていることを意味層に添加のため。(これは、パフォーマンスの欠点である)
だからあなたは10個のスプライトを追加した場合SpriteFrameCacheのレイヤーには10個のdrawcallsがあります。
しかし、SpriteBatchNodeを実装し、その10個のスプライトをCCSpriteBatchNodeに追加し、そのレイヤにCCSpriteBatchNodeを追加すると、同じ10個のスプライトが追加されますが、1回の描画呼び出しだけが行われます。したがって、パフォーマンスの差(最高の場合)は、より大きなゲームでは重要になります。
希望する、乾杯!
ありがとうございます。それは物事をクリアする。 – Voldemort