2010-12-30 20 views
1

Wenn Sie für das iPhone programmieren, wann sollte CoreAnimation am besten über eine andere API (und umgekehrt) verwendet werden? OpenGL hat einen allgemeineren Bereich von Funktionen (so niedrig wie es ist). CoreAnimation ist viel einfacher einzurichten und verfügt über Funktionen wie Caching.Wann und wann nicht CoreAnimation verwenden

Ich mache ein Spiel (2D), und es beinhaltet eine Menge Physik. Ich möchte wirklich, dass dieses Spiel bei mindestens 50 FPS läuft, vorzugsweise bei 60 (oder was immer nötig ist, um mit Vsync mitzuhalten). Ich kann in diesem Fall keine Animationen verwenden, aber ich kann alles in Sprites/CALayers aufteilen. Ich werde ihre Position und Rotation jeden Frame (vielleicht nur die sichtbaren) einstellen. Viele der Sprites sind identisch. Einige dieser Sprites werden bei jedem Bild die Farben wechseln. Ich werde nicht viele Bilder verwenden, aber ich werde viele Farbverläufe verwenden.

Wird CoreAnimation also eine Optimierung oder ein Engpass sein? Wann sollte CoreAnimation am besten verwendet werden und wann sollten andere APIs am besten verwendet werden?

Antwort

4

Mit Core Animation können Sie viel mit einer minimalen Menge Code tun. Es macht das Verwalten von 2D-Ebenen und deren Animation relativ einfach. Da Animationen für Sie behandelt werden, auch wenn Sie komplexe Pfade oder Timing-Kurven verwenden, müssen Sie keinen Code schreiben, um die Anzeige jedes Frames zu aktualisieren oder das Tweening einer Animation zu berechnen. Core Animation integriert sich auch gut mit den 2D-Zeichenfunktionen von Quartz, mit nativen Cocoa Touch-Oberflächenelementen und Touch-Bedienung und mit Ihrem Objective-C-Code an anderer Stelle in Ihrer Anwendung.

Wenn Sie das Framework wie vorgesehen verwenden, können Sie eine sehr gute Leistung erzielen. In meinen Benchmarks auf meinem alten iPhone der ersten Generation konnte ich 50 durchscheinende Ebenen gleichzeitig auf dem Bildschirm mit etwa 60 FPS animieren. Dies ist jedoch mit vordefinierten linearen Pfaden, die für jede Schicht im Voraus spezifiziert werden, und ohne Unterbrechung der Animationen.

OpenGL ES ist für, wenn Sie einfach nicht denken, dass Sie in der Lage sein werden, die notwendige Leistung zu erhalten, ohne direkt mit der zugrunde liegenden Hardware zu sprechen oder wenn Sie echte 3D-Arbeit tun müssen (Core Animation kann) begrenzte 3-D-Effekte, aber nur mit rechteckigen Ebenen). Der Nachteil einer besseren Leistung und Flexibilität ist, dass viel mehr Code geschrieben werden muss, der schwerer zu lesen ist. Außerdem kann es manchmal ein Albtraum sein, OpenGL ES zu debuggen. Ein weiterer potenzieller Vorteil von OpenGL ES ist, dass es ziemlich plattformunabhängig ist, so dass Sie Ihren Renderer möglicherweise so erstellen können, dass er leicht vom iPhone auf Android, den Desktop usw. transplantiert werden kann.

Im Allgemeinen war meine Empfehlung, Core Animation zuerst zu sehen, ob es tun kann, was Sie wollen, weil Sie in der Lage sein werden, eine Anwendung viel schneller auf diese Weise zu bauen. Wenn das nicht angemessen ist und Sie ein 2D-Spiel machen, wäre vielleicht cocos2d ein guter Weg. Ich habe das Framework nicht selbst benutzt, aber ich habe gehört, dass es den Prozess der 2-D OpenGL ES-Arbeit vereinfacht. Nur wenn keiner dieser Ansätze geeignet ist, sollten Sie zu OpenGL ES wechseln.

Wenn Sie neugierig sind, beziehe ich sowohl Core Animation und OpenGL ES in den Videos für my course on iTunes U, wo Sie durch und sehen können, was benötigt wird, um in beiden Umgebungen zu arbeiten.