Ein Teil meiner App zeigt eine Landschaft, aber es ist jetzt irgendwie langweilig. Deshalb plane ich, einige Partikel über den Bildschirm zu animieren (denke an so etwas wie winzige Flügel - Ссылка ) ). Allerdings habe ich noch kein eingebautes Partikelsystem gefunden; Wie kann ich dies speicher effizient machen? Ich habe bereits ein eigenes Animationssystem für einige Wolken implementiert, die mit CADisplayLink über die Landschaft animieren, und es ist etwas träge (obwohl ich hoffe, es bald schneller zu machen). Ein anderes sehr schweres System, wie zum Beispiel 20 kleine Punkte zu einer Zeit zu animieren, wird es wahrscheinlich brechen.
Ich habe noch kein eingebautes Partikelsystem gefunden;
Es gibt einige "freie" Projekte, die Partikelsysteme dort draußen einbetten, Sie können dies besuchen Video-Tutorial für ein Partikelsystem, das für die von Ihnen genannten Anforderungen mehr als effizient genug ist. Diese Art, ein Partikelsystem zu erstellen, ist im Prinzip die gleiche wie Cocos2d. Schauen Sie sich also das Tutorial an und laden Sie dann die Projektdateien herunter. Sie können ihren Partikelemitter leicht in Ihr Projekt einbetten.
Wie kann ich dies speicher effizient machen?
Ich würde Ihnen empfehlen, das " Objekt-Pool-Muster " zu verwenden, im Grunde weisen Sie einen "Pool" von Partikeln vor, lassen Sie uns vorgehen sage 1000 Objekte. Dann fragen Ihre Strahler den Pool nach Teilchen, wenn sie sie brauchen. Wenn der Pool leer ist, können Sie den Fall entsprechend verwalten. Dies mag aus einer Speicherperspektive nicht effizient aussehen, aber es ist sehr leistungsfähig (um eine Echtzeitzuweisung vieler kleiner Objekte wie Partikel zu vermeiden).
Einige Vorschläge: Wenn Sie Ihre Partikelstruktur deklarieren, versuchen Sie, leichtgewichtig zu sein und auf Potenzen von 2 ausgerichtet zu sein (dies wird Ihre Struktur cachefreundlicher machen), diese ist 32 Bytes:
%Vor%Aber abhängig von Ihren Bedürfnissen könnte dies viel kleiner sein, vielleicht brauchen Sie nicht wirklich Farbe / Index / etc. Sie müssen das selbst beurteilen.
Schließlich würde ich Ihnen empfehlen, sich cocos2d CCParticleSystem
class anzuschauen. Sie können den Code hier . Ihre Implementierung ist nicht so leicht, aber sie ist sehr flexibel und kann sehr schöne Effekte erzielen.
Viel Glück mit deinen Teilchen:)
Sie sollten sich das neue Buch iOS Rezepte von Matt Drance anschauen:
Zu den Rezepten gehört unter anderem die Verwendung der eingebauten CoreAnimation CAReplicatorLayer, um einen Emitter in "Construct a simple Emitter" aufzubauen.
Das Buch ist immer noch in Alpha, aber wenn Sie es jetzt kaufen, erhalten Sie Updates, sobald es fertig ist.
Cocos2D ist eine 2D-Grafik-Engine, die OpenGL ES 1 zum Rendern verwendet. Es kommt mit einem eingebauten Partikelsystem. Der Code der Partikel-Engine ist ziemlich einfach. Es verwendet VBOs, um texturierte Quads für die Partikel zu zeichnen. Sie sollten in der Lage sein, dies Ihren eigenen Bedürfnissen anzupassen.
Wenn Sie iOS5 und höher als Ziel verwenden möchten, können Sie die integrierten Funktionen des Betriebssystems verwenden, die CAEmitterLayer.
Tags und Links objective-c iphone core-animation particles