2D Spiele-Programmierung / Game Development mit Physik / 2D Game Engine auf Android und iPhone

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 2D Spiele-Programmierung / Game Development mit Physik / 2D Game Engine auf Android und iPhone

    Hallo zusammen!

    Ich bin neu in der Spieleentwicklung, sprich ich habe noch nie ein Computerspiel oder Android-Game entwickelt. Nun möchte ich mich der Spieleentwicklung zuwenden, hab da eine nette Idee die ich gerne mal umsetzen würde! :)
    Jeder von euch kennt sicherlich "Pokemon" oder "Zelda" auf GameBoy (Color, Advance)! ;) Das sind meiner Meinung nach 2D-Spiele, oder täusche ich mich da? Im Prinzip möchte ich in meinem Spiel wie in den genannten Games einen Charakter/Person haben, die ich durch eine virtuelle 2D-Welt steuern kann. Nun stellt sich mir die Frage, wie ich das am besten angehe, was ich mir anschauen sollte, welche Frameworks oder Engines ich brauche.

    Die Entwicklung ist primär für Android, aber eine einfache Portierung auf iOS (iPhone) wäre für mich eine sehr schöne Sache! Nun gibts da verschiedene Game-Frameworks... aber gibts schon was, wo ich einmal Code schreibe (ggf. bisschen anpasse) und das Spiel auf beiden Plattformen laufen lassen kann?

    Habe folgende 2D Frameworks / Engines gefunden:
    rokonandroid.com/
    code.google.com/p/cocos2d-android/ (scheinbar äquivalent zum iPhone Framework: code.google.com/p/cocos2d-iphone/ )
    emini.at/
    unity3d.com (2D ?)
    polarbit.com/fuse/ (2D ?)

    Kennt ihr noch welche Frameworks? Habt ihr Erfahrungen mit einem Framework und könnt mir ein paar Tipps geben? Was würdet ihr empfehlen? Vielleicht gibts auch ganz andere Ansätze?
    Was genau benötige ich, um ein 2D-Game meiner Vorstellung zu entwickeln?

    Danke schonmal,
    whitenexx
  • 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
  • Hey whitenexx,

    mir gehts ähnlich wi dir. ich beschäftige mich gerade auch mit der android programmierung. bist du bei deiner bisherigen rechersche im internet schon auf interessantes material gestoßen, dass einem beim einstieg in die 2D spielenwicklung hilft? vielleicht gut gemachte tutorials oder sourcecode beispiele? außer dem tutorial zur openGL spielentwicklung (androidpit.de/de/android/wiki/view/Spieleentwicklung_101) habe ich noch nicht viel entdecken können. Dieses Tutorial vermittelt einem schonmal den exemplarischen aufbau einer spielerischen anwendung. allerdings hatte ich nicht vor mich mit der 3D openGL programmierung für android zu beschäftigen. kannst du mir da vielleicht ein paar interessante links geben?

    Gruß Rumo
    Gruß,
    Rumo
  • OpenGL kann man auch für 2D nutzen. Für die Programmierumgebung Delphi (Object Pascal) gibt es das Projekt Andorra2D, das dem Prinzip folgt: "Weshalb nicht 3D-Beschleunigung für 2D benutzen?". Es greift wahlweise auf OpenGL oder DirectX zurück und liefert in der Geschwindigkeit enorme Ergebnisse. Für android ist mir kein solchiges Projekt bekannt. Ich würde aber vielleicht auch diesen Weg einschlagen und auf die Funktionalität von OpenGL zugreifen, da es auf Android problemlos läuft und sehr schnell ist.

    Was willst du denn für ein Spiel programmieren?

    mfg Florian
  • Hey Florian,

    bei dem Spiel handelt es sich um ein Quiz. Naja, eher eine Mischung aus Quiz und klasssischem Brettspiel. Es soll also eine art 2D Spielfeld geben auf dem die eigentliche Handlung statt findet. Der Spieler kann seine Figut über Felder ziehen und muss an bestimmten "Stationen" auf den Spielbrett gewisse Fragen beantworten. Das ganze ist Themenbasiert und soll dem Spieler spezielle Wissensgebiete näher bringen. Damit dabei keine Lange Weile aufkommt, gibt es noch einige interessante Features, wie eine Art "Shop" um sich Bewegungspunkte zu kaufen,... usw. Das Konzept ist noch nicht zu 100% ausgearbeitet. Allerdings stellt sich für mich die Frage wie ich diese Idee am besten umsetzten kann. Unity3D wahr vor einiger Zeit eine Interessante Option. Allerdings ist die bald erscheindede Lizenz für das Android Pro Development Kit ziemlich teuer. Und auf den Release der Basic Version möchte ich ungern warten. Das wird nämlich noch dauern. Außerdem erscheint mir das Vorhaben meine doch recht simple Spielidee mit einem doch recht komplexen 3D Gamedevelopment Framework umzusetzen, wie der bekannte Versuch mit "Kanonen auf Spatzen zu schießen". Dein Gedanke OpenGl um eine Dimension nach unten zu drücken ist eigentlich eine gute Idee. Wie wäre deine herangehensweise für eine solche Spielidee? Oder reicht es hier aus mit Android Standart Elementen wie "Views und Gadgets" zu arbeiten?

    Gruß Rumo
    Gruß,
    Rumo
  • Hallo Rumo,

    OpenGL auf 2D-Basis hat sicher den Vorteil, dass es enorm schnell ist. Du kannst das ganze auch sicher sehr schön objektorientiert lösen. Das Quiz hat (ich nehme mal an) eine fixe Größe. Sie stellt deine Welt dar, auf der verschiedene Felder sind (einfache, auf denen nur gelaufen wird; solche, auf denen Fragen beantwortet werden müssen; andere Felder, auf denen irgendetwas passiert; usw.). Das Quiz ist Single-Player oder Multi-Player oder vs. Android?

    Sicher ist es auch mit Views und Gadgets lösbar, aber wenn du dich einigermaßen in OpenGL zurechtfindest und etwas mit Java am Hut hast, kannst du dir sicher nach einigem Überlegen (=>Konzeptentwicklung) eine schöne Engine programmieren, die dir die Arbeit abnimmt. Wenn du diese Engine modular hältst und schöne OOP betreibst hast du sicher auch in anderen Projekten Verwendung dafür.

    Wenn du noch Fragen hast die das Konzept betreffen, dann ab damit in die Konzeptentwicklungs-Rubrik. Auch andere Fragen beantworte ich gerne so gut ich kann :)

    mfg Florian
  • Ich bin auch gerade dabei ein 2D Spiel zu programmieren und auch schon recht weit. Gut hierzu sind die Beispiele des Google SDK, Lunar Lander und JetBoy. Dies sind aber eher Action Spiele mit ein paar einfachen 2D Animationen. Zu diesem Thema habe ich auch ein paar gute Blog Beiträge gefunden: andforge.net/

    Zudem gibt es hier eine gute Seite mit einer 2D Open GL Engine namens AndEngine. Ich empfehle unbedingt das Beispielapp runterzuladen und die Physik Engine zu testen:
    andengine.org/

    Hier ein kleiner Ausblick:


    Gruß

    Max Zorin [Zorin Industries]
  • Ein paar Freunde und ich haben nun ein Team zusammengestellt. Wir wollen gemeinsam an diesem Projekt arbeiten. Zur Zeit fragen wir uns aber, wo genau wie einsteigen müssen oder was der erste Schritt ist, den wir tun müssen. Sprich einfach neues Projekt in Eclipse anlegen, aber was dann? (Planung wie was aussehen soll, haben wir schon einigermaßen, und wird noch genauer)

    Wie arbeitet man bei so einem Projekt (Gameboy Pokemon ähnlich)? Nach MVC-Pattern bestimmt nicht, oder?
  • OOP ist das Stichwort.

    Es gibt die Welt oder Map oder World. Wie du es nennen willst. auf der findet die Handlung statt. Du hast 2D-View, also wahrscheinlich aus der Vogelperspektive.
    Die Map setzt sich aus einem 2D-Raster zusammen, in dem sich die Felder befinden (jedes Feld hat eine x und eine y-Koordinate auf der Map). Die Felder haben ein bestimmtes Bild (Gras, Fluss, Stein, Wald, Wüste, ...). Das ist der Untergrund. Darauf befinden sich die statischen Objekte (Häuser, Brücken, ...). Dann gibt es noch die Actors (Akteure) die sich auf der Map bewegen können. Diese sind nicht statisch und deshalb müssen deren Bewegungen berechnet werden. Der Hauptactor wird durch den Benutzer gesteuert, für die restlichen brauchst du ne KI (Künstliche Intelligenz). Diese KI kannst du so fein ausarbeiten wie du möchtest (sollen Feinde den Actor verfolgen oder nur durch zufall auf ihn stoßen?, ...??) Da gibt es viele Fragen die du klären musst.
    Ein gut durchdachter OOP-Ansatz hilft viel. Arbeitet das Konzept zuerst ganz genau aus, damit ihr später mitten unter der Entwicklung nicht auf Lücken im Konzept stoßt.

    mfg Florian
  • Ich bin eben nochmal auf die AndEngine, die MaxZorin gepostet hat, gestoßen.
    Die scheint doch sehr interessant zu sein! Ich habe ein Video und Blog Eintrag bzgl. "Tiled", dem Mapeditor gefunden, dass man mit der Engine die Maps (im XML Format), die man mit Tiled erstellt hat problemlos laden kann. Die Demo sieht vielversprechend aus und macht scheinbar genau das, was ich machen möchte:
  • Moin,

    ich habe mal aus Spass ein Spiel für Android geschrieben .... OHNE engine ... hat ewig gedauert || ALLES zu Fuß ( OpenGL )
    Der controller 'links unten' war echt der Horror zu implementieren !

    ballerfisch für android ...
    ach ja und nonsense ( suchen im store : nonsense excess )

    ABER es hat sich gelohnt ... viel gelernt !!!

    mit einer engine 'stöpsel' ich das jetzt in paar Tagen zusammen ... libGDX ... absolut zu empfehlen ! ( wenn es schnell gehen soll ) :)