Hallo whitenexx,
ich kann zwar nur aus Erfahrung für PC's sprechen, jedoch hab ich da so den einen oder anderen Ratschlag für dich:
Engine
Für 2D hab ich sehr gute Erfahrungen damit gemacht, dass ich mir meine Engine selber programmiert habe (die anderen Engines sind meist overloaded und benötigen Einarbeitungszeit, die ich dann doch lieber auf das Zuschneiden einer eigenen Lösung auf meine Problemstellung verwende). Meine ganze virtuelle Welt ist in einem Raster (array) abgebildet, sodass ich im Raster eigentlich jede beliebige Information speichern kann.
Überleg dir ganz genau was du brauchst. Ich hab beispielsweise einen record für die Felder im Raster gehabt, der mir die physikalischen Eigenschaften mitgeteilt hat (Festigkeit: fest / flüssig / gasförmig; Events: Menge von "was passiert wenn man darauf steigt?" bspw. evKill für ein Loch in das der Actor stürzt oder evHint für das Anzeigen eines Hinweises).
Ein weiterer wichtiger Punkt ist die Darstellung der map. Die gesamte virtuelle Welt hat ja eine best. Größe, jedoch muss immer nur ein kleiner Teil davon abgebildet werden. In dem Punkt kannst du ne Menge Rechenzeit sparen, wenn du immer nur den benötigten Teil der Map neu berechnest, den der Benutzer auch zu sehen bekommt. Für 3D ist gerade eine Lösung am werden, die eine unendlich große Auflösung zulassen wird. diese arbeitet mit dem Sicht-Abstand zum Objekt und bestimmt somit wie genau Dinge dargestellt werden (Bsp: Person: stehst du 100m von ihr entfernt brauchst du die Augen nur als zwei schwarze Punkte darzustellen, stehst du genau vor ihr müssen die Augen Details wie Augenfarbe, Pupillengröße, Feuchtigkeit, etc. enthalten, ...) Das dürfte jedoch für ein 2D-Spiel von geringerer Bedeutung sein.
Wenn du eine hohe Portabilität willst, brauchst du ne Scriptsprache für die du einen Interpreter schreibst. Einmal in Java für Android und einmal für iPhone in Objective-C. Der Vorteil liegt darin, dass du jedes beliebige System einbinden kannst, da du nur in einer unterstützten Sprache einen Interpreter für deine Scriptsprache schreiben musst. Ist aber der umständliche Weg, da die Entwicklung einer Scriptsprache + Interpreter + ... mehrere Monate bzw. Jahre in Anspruch nehmen wird.
Deshalb mein Tipp: Schreib dir in Java ne schöne Rendering-Engine, die dir alles zur Verfügung stellst, das du benötigst und lass iPhone mal außen vor. Dafür entwickelst du besser später ne eigene Lösung anstatt auf Portabilität zu achten. Aber dann gäbe es noch die Möglichkeit, dass du Internet voraussetzt und das Spiel in PHP oder Java ins Netz stellst und über ne App auf dem Device abfragen an den Server stellst, der dir dann eine Map zusammenstellt und sie als Bild an dein Device sendet. Dann hast du auf dem Device nur eine kleine App, die Touch abfängt und einen entsprechenden Befehl an deinen Server sendet.
Bei Fragen zu einem der angesprochenen Themen oder weiteren Fragen ins Umfeld antworte ich dir gerne
mfg Florian