SurfaceView oder Engine?

  • Antworten:5
Fabian
  • Forum-Beiträge: 144

07.12.2013, 14:35:10 via Website

Hey Leute,

ich habe mir fest vorgenommen, mit 2D Spiele Entwicklung anzufangen. Leider habe ich keine Ahnung von dem ganzen Plan 8o .
Auf der offiziellen Android Seite wird von SurfaceViews und normalen Views gesprochen. Wo liegt nun genau der Unterschied zwischen den beiden und einer Engine like "AndEngine" ? Habe ich bei einer Engine auch die Möglichkeit mit Java Code selbst mitzuwirken oder bin ich allein auf die Engine gedrosselt?
Wie sieht das ganze mit Engine aus, kann ich dort 2D Elemente zusammen klicken und nebenbei wird dann der Java Code geschrieben?
Andersrum kann man ohne Engine sicher seine 2D Bilder mit irgendeinem Programm zeichnen und dann z.B via Bitmap auf ein SurfaceView zeichnen lassen oder?

Was von den beiden Wegen ist resourcenschonender? Oder gleich mit OpenGL anfangen?

Grüße Fabian!

Antworten
impjor
  • Forum-Beiträge: 1.793

07.12.2013, 19:45:04 via App

Der Unterschied zwischen View, SurfaceView ist, dass du mittels deineView.invalidate() nur möchtest, dass deine View neu gezeichnet wird. Bei SurfaceView kannst du selber direkt auf die View zeichnen. Zudem ist es möglich die Zeichnungen/Simulationen auf einem anderen Thread zu machen, wenn du SurfaceView benutzt. Für Spiele also besser geeignet.
Im Prinzip macht eine Engine nichts anderes, als diese View zu erstellen, berechnen, wo sich dein Objekt befindet (Kamerabewegung) usw.
Code wird dir da halt erspart, aber ein Drag'n'drop Spiel kann man nicht erstellen. Wenn du nicht coden möchtest nimm AppInventor.
OpenGL ist nochmal etwas anderes: Da 3D unterstützt wird und sehr low-level (Hardwarebezogen) ist, schwer verständlich, aber in Performance besser, teilweise auch für 2D-Grafiken.
Zudem bietet Canvas nur begrenzte Möglichkeiten in Bezug auf Scaling, Rotation usw. OpenGL deutlich mehr.

Als Empfehlung: Da du scheinbar schnell zum Ziel kommen möchtest und wahrscheinlich nicht mit so low-level Sachen rumärgern willst, nimm eine Engine wie LibGDX. Diese übernimmt dann alles OpenGL-Zeug und du musst nurnoch den Pfad zu deinem Bild sagen und LibGDX malt es für dich.

LG

Liebe Grüße impjor.

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

Antworten
Fabian
  • Forum-Beiträge: 144

07.12.2013, 21:37:58 via Website

Hallo impjor,
ich bin dir sehr dankbar für deinen Beitrag, er hat mir wirklich weitergeholfen und so einiges erklärt. Mir geht es aber nicht direkt darum, nicht coden zu müssen und auch das schnelle Ziel muss es nicht sein. Aber im Moment komme ich mit der ganzen Sache nicht wirklich weiter, weil ich etwas nur verstehe, wenn ich wirklich weiß, was jedes kleinste Detail bedeutet und in einem Programm ausmacht. Ich werde deinen Tipp mit dem LibGDX trotzdem mal ausprobieren, obwohl ich eig. coden liebe(wenn ich denn mal Fortschritte machen würde:( )

Liebe Grüße Fabian!

Antworten
impjor
  • Forum-Beiträge: 1.793

07.12.2013, 21:43:17 via App

Keine Sorge: Wenn du LibGDX benutzt, musst du noch genug coden (ebenso bei den meisten anderen Engines).

Ich sage gerne, wenn du eine Engine selber schreiben willst, dann schreibe eine Engine.
Wenn du ein Spiel schreiben willst, dann schreibe das Spiel, aber nicht die Engine.
Warum das Rad neu erfinden, wenn es dann viereckig ist?
Aber das ist natürlich auch subjektiv und meine Meinung.

Bei LibGDX z.B. kannst du aber auch den gesamten Code lesen, den dir LibGDX sozusagen abnimmt, da LibGDX OpenSource ist.

LG

Liebe Grüße impjor.

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

Antworten
Fabian
  • Forum-Beiträge: 144

12.12.2013, 18:12:33 via Website

Hey impjor,

da ich mir gar nicht vorstellen kann, wie so eine Engine geschrieben wird, werde ich wahrscheinlich eine benutzen. Ich habe mir zwar den Code dieser Engine mal angeschaut, aber da sind doch nur ganz normal Methoden und Variablen enthalten!?
Ich hätte gedacht, dass die Programmierung solcher Engines erstens in c++ und zweitens professioneller und für mich unverständlicher geschrieben werden... :wink:


grüße Fabian

Antworten
impjor
  • Forum-Beiträge: 1.793

12.12.2013, 18:18:55 via Website

Die Engine wurde zum Teil in C++ geschrieben (https://github.com/libgdx/libgdx/tree/master/gdx/jni), aber natürlich wurde eine Art Layer, eine Zwischenschicht programmiert, die die Verwendung komfortabler macht.
Zudem ist es nur sinnig, das nötigste in C/C++ zu schreiben, da dies für jede Platform (Windows, iOS, Android, ...) extra kompiliert werden muss. Zu dem enthält LinGdx auch viele Klassen, die dir Arbeit abnehmen, die du auch ohne Aufwand hättest selber schreiben können (Animation z.B.) oder mit viel Know-How (Stage/Scene2d allgemein).
Allerdings ist es doch nicht schlecht, dass du viele Teile von der Engine verstehst.

LG

— geändert am 12.12.2013, 18:19:12

Liebe Grüße impjor.

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

Antworten