GameEngine OpenGL/Canvas

  • Antworten:6
  • Bentwortet
Sam Riviera
  • Forum-Beiträge: 3

27.11.2013, 01:05:05 via Website

Guten Tag.
Ich habe vor ein einfaches Spiel zu programmieren ( in Zukunft aber auch komplexere Spiele zu machen ) und stehe vor einem kleinen Problem.
Hatte mir vor einiger Zeit mal ein Tutorial zum Thema Spieleprogrammierung angeschaut, dort wurde zum Zeichnen einfach die Canvas Klasse genutzt, was ansich ja auch eine sehr einfache Möglichkeit ist, etwas auf den Bildschirm zu bekommen ( vergleichbar mit Swing ), allerdings hat es den Nachteil, dass die Arbeit so ziemlich allein von der CPU erledigt wird und kein Gebrauch der GPU gemacht wird.
Das hätte ich gerne und deswegen habe ich mir ein Tutorial zum Thema OpenGL angeschaut bzw. ein weiteres Tutorial zum Thema Spieleprogrammierung ( hier auf der Webseite:https://www.nextpit.de/de/android/wiki/view/Spieleentwicklung_101 ).

Etwas spezieller geht es da ja um OpenGL ES 1.0. Jetzt ist die ganze Sache nur leider wenig abstrahiert und ich arbeite ungerne mit ByteBuffern und Vertices etc., daher war ich auf der Suche nach einer GameEngine ( mit weitestgehend offengehaltener Lizenz ), die mir die Sache in etwa soweit abstrahiert, dass ich es wie Canvas nutzen kann.

Macht es vielleicht Sinn sich eine eigene Engine zu schreiben, die dann von OpenGL ES 1.0 abstrahiert?

Gelesen habe ich auch, dass man sich wohl nur bei der 1.0 Version sicher sein kann, dass sie von allen Androidgeräten unterstützt wird, wobei OpenGL ES >1.0 eh nicht wirklich interessant ist, weil ich nur 2D Spiele programmieren wollte. Kann mir dazu jemand etwas sagen?

Ich hab bereits Spiele mit Swing und mit der Slick Engine programmiert in Java, in erster Linie geht es mir auch nur um das Zeichnen, brauche keine Engine, die mir Sachen zum Input, zum Sound oder zum GameLoop etc. liefert.

Im Moment sieht es fast so aus, als müsste ich mir eine eigene Engine schreiben, damit ich Methoden ala drawImage(), drawString() etc. habe und intern OpenGL genutzt wird.

Kennt ihr gute GameEngines, mit denen ihr gute Erfahrung gemacht habt? Wie sieht dort der Grad der Abstraktion aus bzw. wie geht das Zeichnen von Statten und gehe ich richtig in der Annahme, dass diese Engines dann auch nichts anderes tun, als Methoden zu implementieren, mit denen man einfach arbeiten kann, die intern dann OpenGL nutzen?

Bedanke mich schonmal für eure Zeit.

Mit freundlichen Grüßen

Jan

Antworten
impjor
  • Forum-Beiträge: 1.793

27.11.2013, 16:34:59 via App

Wenn du deine eigene Engine programmieren willst, dann programmiere deine eigene Engine.
Wenn du dein eigenes Spiel programmieren willst, dann nutze eine Engine.
Warum immer das Rad neu erfinden und es selbst viereckig bauen?

Für Android gibt es eine große Anzahl an Engines (libGDX, jPCT, jMonkey, Unity, Cocos2d,...), vor kurzem hatten wir hier auch noch einen Thread, der sich genau damit beschäftigt hat, schau da mal nach. (Edit der Link: https://www.nextpit.de/de/android/forum/thread/576980/Game-Engine)

Zu libGDX kann ich sagen, dass es ungefähr die von dir gewünschte Abstraktionsschicht ist, wobei Sound, Musik, Input auch von der Engine bereitgestellt wird, was das Arbeiten aber einfacherer macht (mMn.).

LG

— geändert am 27.11.2013, 16:37:25

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Sam Riviera
  • Forum-Beiträge: 3

27.11.2013, 16:42:12 via Website

Danke für die Antwort!
Libgdx ist mir auch schon des Öfteren über den Weg gelaufen, neben AndEngine. Letztere besitzt leider keine wirkliche Dokumentation, sodass ich davon erstmal Abstand genommen hatte. Libgdx schaue ich mir dann mal an.
Dass noch weitere Dinge wie Sound, Input etc. bereitgestellt werden ist auch meiner Meinung nach gut, nur ging es mir in erster Linie um das Grafikzeugs, aber wenn mir Arbeit abgenommen wird, ist das immer super. :)

Antworten
impjor
  • Forum-Beiträge: 1.793

27.11.2013, 16:48:35 via App

Ich kann dir auch nur zu libGDX raten! (Das Tutorial, welches du gelesen hast, stammt übrigens von libGDX's Macher.)
Neben AndEngine ist die Verwendung (nach dem Setup) wesentlich leichter, aber der grösste Vorteil ist, dass man gleich eine Java-Desktop-Anwendung dazubekommt. Das ist fürs Testen und Debuggen unglaublich hilfreich, selbst wenn man nicht vor hat, die App als iOs, HTML5 oder Desktop-Anwendung zu erstellen.
Als Doku ist am besten das neue Wiki auf GitHub geeignet, besser als die meisten Tutorials von so Blogs.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Sam Riviera
  • Forum-Beiträge: 3

28.11.2013, 01:11:39 via Website

Bin jetzt dabei mich in libGDX einzuarbeiten, also erstmal alles grundlegend einzurichten.
Interessant, dass das Tutorial vom libGDX Macher ist, aber das libGDX von einem Deutschen ist fiel mir schon bei den Youtube Videos auf :-).
Crossplatforming ist zwar ein sehr nettes Feature, hat mich aber anfangs eher abgeschreckt, weil ich mir nicht wirklich vorstellen konnte, wie dann die ganzen Eigenheiten von Android berücksichtigt werden ( die Tatsache, dass man mit Activities arbeitet, der ganze XML Kram und natürlich der Touch Input, Sensoren und ganz wichtig: Unterschiedliche Bildschirmgröße der Smartphones, da muss ich mal schauen wie das geht ).


EDIT: Noch ein kleiner Zusatz: Ist das richtig, dass die Spiellogik und das Zeichnen zusammenfallen? Also bislang hab ich in meinen spielen immer eine Art Render-Methode gehabt und eine Update-Methode. So wird dann 60 mal in der Sekunde auf Input reagiert, aber sooft neugezeichnet wie geht. Also bislang hatte ich immer einen fixen timestep und keinen variablen ( update mit deltatime ).

— geändert am 28.11.2013, 01:40:52

Antworten
impjor
  • Forum-Beiträge: 1.793

28.11.2013, 14:17:55 via App

Ja, anfangs mag man kaum glauben, dass man Android, HTML, iOS und Desktop unter einen Hut bringen kann. Allerdings ist das sehr simple gelöst.


Dadurch, dass die Module statisch sind (Gdx.app.*, Gdx.input.*, Gdx.graphics.*), kann man überall zeichnen. Also ja, es wird simuliert/gerendert und gezeichnet in der render-Methode.
Das ist aber auch nicht schlimm oder unüblich. Trotzdem würde ich an deiner Stelle in der render() nur wieder zwei Funktionen fürs zeichnen und rendern aufrufen.
Das hat später viele Vorteile.

LG

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten