Wann CCSpriteBatchNode?
in Cocos2d ich werde Abspielen einer animation. Die animation hat etwa 12 frames, und jeder frame ist ziemlich groß. In der Tat, die hd-version von jedem Rahmen ist Recht groß.
Eh, erste, erstellt habe ich es, indem Sie alle 12 Bilder in eine textur mit Zwoptex. Die textur ist über 2048x2048.
Dies ist, so kann ich animieren, ein CCSprite in einem CCSpriteBatchNode mit, dass textur.
Aber ich scheine immer eine level-2-Speicher-Warnung.
Nun, dass ich an Sie denke, denke ich nicht, dass CCSpriteBatchNode sollte verwendet werden, für die eine sprite. Ich denke, es war nur sinnvoll, wenn Sie wollte, um dann lose zu ziehen von sprites, die Verwendung der gleichen textur.
Deshalb möchte ich wissen: Sollte ich das sprite animieren frame-by-frame (keine großen textur)? Oder ist es möglich, dass riesige textur, aber in einer anderen Art und Weise?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie sind Recht CCSpriteBatchNode.
CCSpriteBatchNode ist wie ein batch-Knoten: wenn es mit Kindern, es zieht Sie in 1 einzigen OpenGL-Aufruf (oft bezeichnet als "batch-draw"), in Abwesenheit von CCSpriteBatchNode (in diesem Fall) alle die "batch " zeichnen" genannt wird, da viele die Zeit als Anzahl der Kinder (sprites).
Einen CCSpriteBatchNode kann auf eine und nur eine textur (ein Bild-Datei, eine textur atlas), d.h. sprite-sheet erstellt von zwoptex. Nur die CCSprites, die darin enthalten sind, die textur Hinzugefügt werden können, um die CCSpriteBatchNode. Alle CCSprites Hinzugefügt CCSpriteBatchNode gezogen in eine OpenGL-ES-zeichnen aufrufen. Wenn die CCSprites nicht Hinzugefügt CCSpriteBatchNode dann eine OpenGL-ES-draw-call benötigt werden für jede, der weniger effizient ist.
Nach Ihrem Szenario, die Sie nicht verwenden CCSpriteBatchNode da gibt es nur eine textur gerendert, die zu einem bestimmten Zeitpunkt.
Ist es egal. Sie laden die 2048 x 2048 textur sowieso. Die Frage, um darüber nachzudenken ist, warum nur ein 2048 x 2048 textur gibt dir eine Stufe 2 Warnung? wie viele solche Texturen sind, die Sie laden. BTW 2048 x 2048 ist nur auf unterstützten iPod3G/iPhone3GS oben (die ist gut).
In den Fall, Sie laden viele Texturen (das scheint mir richtig zu sein). Sie brauchen, um Programm-Logik, wo Sie entladen die textur, wenn Sie nicht notwendig sind.
Schauen Sie auf die folgenden Methoden:
Soweit die animation betrifft, die Sie erstellen können CCAnimation und nutzen, oder (je nach Szenario), die Sie verwenden können, setDisplayFrame(CCSpriteFrame frame);