2009-08-06 4 views
0

Ich komme aus einem C/C++ - Hintergrund und in jüngerer Zeit Flash. Jedenfalls habe ich eine 2D-Engine in AS3 geschrieben und möchte sie auf dem iPhone laufen lassen. Zu Beginn habe ich es in C++ umgewandelt. Als Test habe ich eine sehr einfache C++ - Engine geschrieben und die Dateien zu einer standardmäßigen View-basierten Anwendung in XCode hinzugefügt. Ich fügte dann eine UIImageView hinzu, die den ganzen iPhone Bildschirm bedeckte.Verwenden einer vorhandenen C++ - Engine auf dem iPhone

Die Art, wie meine Test Engine im Moment eingerichtet ist, ist, dass jedes Frame das Ergebnis zu einem Bild rendert, das dann verwendet wird, um die UIImageView jedes Frame zu aktualisieren. Unter der Annahme, dass ich Eingaben vom iPhone an die C++ - Engine weitergeben kann, scheint dies eine ziemlich plattformunabhängige Lösung zu sein. Da ich seit weniger als einem Tag für iPhone/Mac programmiert habe, habe ich mich gefragt, ob dies der Standardansatz ist, um eine bestehende C++ Engine auf dem iPhone laufen zu lassen und wenn nicht, was ist das?

+1

Sie nicht korrekt sind, hat das iPhone einen vollständigen C++ Laufzeit, und es gemeinsam genutzte Dinge wie Exception-Handler mit Objective C, so dass Sie Unifed haben Ausnahmen (Objective C kann Ausnahmen von C++ abfangen und umgekehrt) –

+0

Ich verstehe Ihre Antwort unten, das scheint so zu sein, was ich mache. Ich weiß über die Ausnahmebehandlung in Objective-C Bescheid. Können Sie bitte genauer auf Ihren Kommentar "Sie sind nicht korrekt" eingehen? –

Antwort

0

Ja, das ist ein ziemlich normaler Weg, damit umzugehen. Im Allgemeinen würden Sie entweder kleine Objective-C-Stubs für Ihre Ereignisse und Dinge wie das Ausschieben des Frames verwenden, oder Sie würden einen OpenGL-Kontext einrichten und ihn dann an Ihren C++ - Code übergeben.

1

Es gibt kein Problem beim Rendern in ein Bild und Aktualisieren dieses Bildes, aber Sie erhalten keine Beschleunigung von der GPU mit dieser Technik. Sie würden also eine Menge CPU-Zyklen verbrauchen, was wiederum die Batterie verschlingt.

Wenn die Objekte, die Sie rendern, in normalen Grafikgrundelementen beschrieben werden können, verwenden Sie unbedingt die für die Plattform optimierten Zeichnungs-APIs, die Arbeiten an die GPU delegieren können.

Ein alternativer Ansatz ist die Verwendung von OpenGLES zu machen, aber dies hat eine Lernkurve