# Engine2D - Java 2D Engine



## skimmo (29. Jul 2014)

Hallo Leute,
Ich programmiere schon etwas länger mit Java und habe vor einiger Zeit angefangen Spiele zu Programmieren vorerst erstmal nur 2D.
Ich habe mir überlegt ein 2D Engine zu schreiben und dies auch als YouTube Tutorial zu machen. 
In kürze werde ich einen Link zu den Videos hinzufügen.
Hier schon mal eine kleine Vorschau:






Hier wird in kürze eine kleine Inhaltsangabe und ein bisschen Hilfestellung zur Verwendung 

Ihr könnt gerne eure Ideen mit mir teilen.
Gruß
Skimmo


----------



## Keyone94 (29. Jul 2014)

das folgende ist nicht böse gemeint, aber ist eine 2D Engine nicht vielleicht ein etwas großes Ziel?
so eine 2D Engine ist eine Menge Arbeit und ich würde mindestens 5-10 Jahre Erfahrung mit Java foraussetzen , damit man überhaupt eine Chance hat Theoretisch alles Programmieren zu können
praktisch dürfte es dann immer noch 1 Jahr mindestens dauern, bis man es Engine nennen kann
und ich denke mit 4 Klassen (laut Screenshot) ist das nicht mal ein Ansatz von einem Ansatz von einem Ansatz von einer Engine :noe:

also im Moment glaube ich nicht, dass da etwas draus wird, ganz alleine und ohne wirklichen Ansatz =/
hast du denn viel Erfahrung mit Java und Spielentwicklung?


----------



## Androbin (30. Jul 2014)

: Keyone94 *8*
Mach' skimmo nicht so runter, sondern ermutigt ihn/sie lieber!

: skimmo *8*
Das ist ein wirklich lobenswertes Zeil; lass' dich nicht davon abbringen!
Wann immer du Hilfe brauchst: Wir helfen dir!


----------



## Joose (30. Jul 2014)

Androbin hat gesagt.:


> : Keyone94 *8*
> Mach' skimmo nicht so runter, sondern ermutigt ihn/sie lieber!
> 
> : skimmo *8*
> ...



@Androbin
Das hat nichts mit "runter machen" zu tun. Sondern einfach klar sagen das eine eigene Spiele Engine ein ziemlich ehrgeiziges Ziel ist, und viele es schon machen wollten aber einfach an Umfang oder Details gescheitert sind. Außerdem fehlt hier eine richtige Konzeptvorstellung, daher kann ich mir nicht vorstellen in weit sich der TO mit dem Thema beschäftigt hat.

@skimmo
Hast du dir denn schon ein Konzept überlegt? Was soll deine Engine alles unterstützen?
Welchen Grund hast du denn eine eigene Engine schreiben zu wollen? Einfach die "Übung" oder bieten dir die 2D-Engines, welche aktuelle so "am Markt" sind, etwas nicht was du unbedingt brauchst?

Also wie schon gesagt, ein sehr ehrgeiziges Projekt, an dem schon viele gescheitert sind.
Interessant wäre eben ein Konzept, deine bisherige Erfahrung mit der Spieleprogrammierung, anderen Engines usw.
Und ein ganz wichtiger Grund: Was sollte jemanden bewegen deine Engine zu verwenden? Welche Vorteile wird sie bieten? Oder schreibst du sie einfach wegen des Tutorials?


----------



## skimmo (30. Jul 2014)

@Keyone94
Ja ich weiß, dass 4 Klassen nicht viel sind aber ich stehe noch ziemlich am Anfang mit der Engine. Und ich schreibe ja auch hier im Forum um neue Ideen zu bekommen und vielleicht auch Hilfe Wenn ich welche benötigen sollte. ich hab bis jetzt ca 3 Jahre Erfahrung, was nicht viel ist, aber danke für die Kritik. Ein bisschen Kritik kann ja nie schaden.

@Androbin
Danke dass du mich so verteidigst und Unterstützt.

@Joose
Ehrlich gesagt hab ich noch kein wirkliches Konzept und weiß auch noch nicht ganz was sie alles Unterstützen soll aber da könnt ihr mir ja auch bei helfen. Der Grund ist halt die Übung für mich, das Tutorial für andere und vielleicht hilft sie manchen Leuten auch bei ihrer Spieleentwicklung. Die Engine sollte möglichst einfach anzuwenden sein, das ist so das Hauptziel.

Also nochmal an alle es wäre schön wenn irgendwelche Ideen kommen würden.
Gruß
Skimmo


----------



## Androbin (30. Jul 2014)

Zum Konzept *8*

Fertige dir am besten eine "Do do"-Liste für die Dinge, die du noch in deine Engine einbauen willst (Physik, etc.)
und schreib' uns am besten auch, was du bereits fertig hast.

Es wäre auch nicht verkehrt, gleich mal ein neues Spiel zu machen, welches deine Engine nutzt;
das ist wohl die beste Möglichkeit, deine Engine auszutesten, etc.


----------



## skimmo (30. Jul 2014)

Danke für die Idee mit der to-do-list das währe eine gute Idee und ich werde in kürze eine anfertigen.
Eine Liste mit Sachen die ich schon habe werde ich wie angekündigt noch hinzufügen.
Der Screenshot aus meinem ersten Post zeigt schon ein kleines Anwendungsbeispiel.
Hier ist ein Link wie weit ich im Moment bin: http://engine2d.1x.de/30.7.2014/Vorbereitung1.jar
Die Jar enthält die Engine2D und das Demo-Spiel Game2D und die Source Dateien.


----------



## lord239123 (30. Jul 2014)

Hi,
es kann auf jeden Fall nicht schaden, sowas mal selber versucht zu haben.
Vielleicht kannst du ja ein par der folgenden Sachen früher oder später in die Engine mit einbauen:
-Map, welche aus mehreren Ebenen bestehen kann(Am besten mind. 4)
-Sound und Musikunterstützung. 
-Einfügen von Personen und Einstellung der Laufrichtung von diesen
-Vielleicht eine Möglichkeit eigene Waffen oder Tools zu eintwickeln, je nachdem was die Engine bieten soll
-Eventsystem, also z.b dass eine Person etwas bestimmtes macht, wenn man sie anspricht oder dass man einen Gegenstand bekommt, wenn man ein bestimmtes Feld betritt
-Unterstützung von eigenen Graphiken
-realistisches Physiksystem, bei dem mit realen physikalischen Formeln gearbeitet wird
-Kollisionssystem

Diese Sachen werden dich vermutlich alle sehr viel Zeit kosten, schon für eine erste Version eines Mapgenerators würde ich mind. 2 Wochen einplanen.
Die Sound und Musikunterstützung wird dabei vermutlich noch am einfachsten sein.

Je nachdem, wie umfangreich die einzelnen Funktionen sein sollen, würde ich mind. ein halbes Jahr einplanen.
Falls du alles gründlich machen willst, wirst du mehr als 1 Jahr brauchen!

Für ein Pokemon-Spiel, über das ich hier etwas schreibe, habe ich schon 3 Monate gebraucht und es ist eigentlich noch nicht fertig.
Für eine Engine, die die gleichen Funktionen bieten soll, wirst du um einiges länger brauchen.


----------



## Keyone94 (30. Jul 2014)

es tut mir leid, wenn ich mich oben etwas grob ausgedrückt habe, war nicht böse gemeint =)
ich denke nur einzelne Spiele oder eine einzelne Spiele Mechanik programmieren, wäre vlt besser als eine ganze Engine
z.B. könntest du dich erstmal auf 2D Spiele mit Tilemap und Draufsicht beschränken (Pokemon, Fire Emblem usw.)

sich anfangs zu viel vor zu nehmen und dann merken, dass es nicht klappt, ist viel demotivierender als im vorherein etwas Kritik zu hören (finde ich)


das mit den YouTube Videos finde ich übrigens gut, da viele junge Programmierer mit Hilfe von YT Tutorials lernen und ein zwei Videos mehr kann eigentlich nicht schaden (solange der erzählte Inhalt richtig ist^^ )

was ich empfehlen würde:
- Sound/Musik
- einfaches laden und zeichnen von Grafiken
- Animationen und vor allem Effekte (die zeitlich ablaufen und dann verschwinden)
- Tilemaps (sind leichter als richtige Physik)
- Entity System (mit Kollisionserkennung)
- eine Steuerung
- ein Eventhandler
(also im Endeffekt ähnlich dem, was Lord bereits genannt hat)

(ich weiß nicht ob die nachfolgenden noch zu einer Engine gehören oder nicht)
- XML oder ähnliches zum abspeichern von Daten (finde ich immer ganz praktisch)
- Netzwerk Unterstützung


----------



## lord239123 (30. Jul 2014)

Skimmo, das mit dem Youtube-Kanal ist auf jeden Fall eine gute Idee.
Hast du dir denn schon einen erstellt?

Ob die Engine mal irgendwann fertig wird, ist vermutlich nicht so wichtig.
Hauptsache du und deine eventuell kommenden Abonnenten lernen was dabei.
Versuche dann aber am besten, möglichst viel von deiner Programmierarbeit aufzunehmen. 

Fang mit der Engine am besten mit dem Weltengenerator an.

Weitere Tipps habe ich schon vorher geschrieben. :toll:


----------



## Network (30. Jul 2014)

Meine erste "gescheite" "2D"Engine in Java hatte ich im Alleingang mit 6Jahren Programmiererfahrung "fertiggestellt" (davon 5Jahre in Java und davon wiederum 2Jahre professionelle Erfahrung).

Davor hatte ich mich bereits an vier 2D Engines versucht gehabt und die Erfahrungen und die Probleme die ich dort sammelte gingen immer wieder in die Folgeversionen mit ein, sowie selbstverständlich auch die Erfahrung die ich in anderen Projekten gesammelt hatte.

An der finalen Version feile ich hin und wieder immernoch. Jahre nach der Fertigstellung und aktualisiere auf z.B. die neueste OpenGL-Version und neue Bibliotheken und Möglichkeiten die mir das OS bietet.

Mittlerweile ist es eine semi3D Crossover-Engine die ohne Codeänderungen Spiele (die darauf entwickelt wurden) sowohl auf allen von Java unterstützten Betriebssystemen als auch auf Android ausführen kann.
Zusätzlich Multithreadingunterstützung (4Kerne von Haus aus) und GPU Unterstützung (per OpenGL 4).
Mein Ziel war es, eine Engine zu entwickeln auf der man möglichst einfach und in kurzer Zeit eine grafische Anwendung, vor allem Spiele, entwickeln kann. Ohne viel Ahnung über spezielle Themen wie Multithreading, GPUs und Computer Networks zu haben aber gleichzeitig automatisch davon zu profitieren ohne seine Zeit dafür zu verschwenden.

Was mich zu dir bringt, meine drei persöhnlichen Tipps an dich:
1.) Mache dir ein Ziel: Was soll deine Engine später alles können und was (definitiv) nicht. Ganz wichtig!

Du programmierst hier Code auf einem höheren Level um späteren Entwicklern entgegen kommen zu können, wirst sie damit aber auch definitiv in ihrer Handlungsfreiheit einschränken. Du kannst NICHT ALLES viel einfacher machen, sondern etwas nur spezialisieren und darauf solltest du dich konzentrieren.

Meine Engine wurde z.B. für Strategiespiele entworfen, weil das mein Lieblingsgenre ist. Habe mal versucht damit einen Shooter zu programmieren, was dann aber aufgrund von technischen Einschränkungen nur Semioptimal gepasst hat.
Oder eine einfache Oberflächenanwendung, die auf dem Smartphone dank der 4Kerne-Unterstützung und GPU-Nutzung mal relativ schnell den Akku leer gezogen hatte (neben den fehlenden vorprogrammierten Oberflächenelementen wie Buttons oder Textfelder die meine Engine nicht in komplexer Form unterstützt).

2.) Ob eine Engine gut ist oder nicht stellt sich erst im Praxisversuch heraus!

Erst wenn du anfängst darauf Spiele zu programmieren (die deinen Zielen aus Punkt 1 entsprachen) wirst du feststellen ob die Engine tatsächlich so funktioniert wie du es dir in der Theorie vorgestellt hattest oder eben nicht.
Irgendwann entwickelt sich eine Engine auch nurnoch darüber weiter, also in doppelter gleichzeitiger Entwicklung zu einem Spiel.
Die CryEngine z.B. wurde auch mithilfe des Spiels Far Cry weiterentwickelt, entbuggt, verbessert und vollendet.

Gerade am Anfang stellen sich dann häufig ganz große architektonische Patzer heraus und dann heißt es...

3) ... "daraus lernen und alles nochmal von ganz Anfang"


Ich wünsche dir viel Glück und werde das Thema interessiert verfolgen.
Wenn du Fragen hast, du weißt wo man mich findet


----------



## jeegeek (30. Jul 2014)

Also grundsätzlich finde ich die Idee eines Youtube Tutorials nicht schlecht, wenn es gut gemacht ist. Ich würde aber nicht unbedingt ein so großes Projekt beginnen. Mache doch erst einmal was einfaches zum Beispiel ein Pong Spiel mit Slick2D oder ähnliches. Denke auch mal das kein Java Einsteiger die Spieleprogrammierung mit einer eigenen Engine beginnen sollte


----------



## lord239123 (30. Jul 2014)

_jeegeek_
Laut dem ersten Beitrag hier hat er schon 2d Spiele entwickelt.
Jetzt wissen wir zwar nicht, was für Spiele programmiert wurden, aber nach  3 Jahren Programmiererfahrung sollte man sich eigentlich gut genug auskennen, auch schon größere Projekte zu entwickeln.

Mein erstes Spiel war ein Pokemonspiel und hat etwa 3 Monate in Anspruch genommen.
Nach diesen 3 Monaten hat mir leider die Zeit gefehlt, an dem Spiel weiterzuarbeiten, aber es sind schon einige Sachen fertig geworden:
-Es wird immer nur ein kleiner Teil der Map(besteht aus 5 Ebenen) gezeichnet, wodurch die FPS-Zahl erhöht wird
-Es gibt NPCs, die auf der Map nach einer festen Route herumlaufen und die man ansprechen kann. Kommt es zu einer Kollision der NPCs mit einem unbegehbarem Feld oder mit dem Spieler, überspringen sie automatisch so viele Schritte der Route, bis sie wieder in eine Richtung laufen können und setzen die vorgegebene Route dann fort.
-Es gibt ein Kollisionssystem(Der Spieler kann nicht gegen Wädne oder andere NPCs laufen, wobei es bei den NPCs zu einem Bug kommen kann, wenn man gleichzeitig mit einem NPC auf ein Feld gehen will. Ist das der Fall, stehen NPC und Player ineinander)
-Es gibt ein Sound und Musiksystem
-Es gibt alle 18 Typen aus den Originalspielen mit den entsprechenden Vor- und Nachteilen
-Pokemonkämpfe funktionieren bereits gegen wilde Pokemon

Du wirst das bestimmt schaffen, deine Engine zu verfollständigen, erstrecht mit dem Youtubekanal, da die Abonnenten dich bestimmt ermutigen und anspornen werden.
Du musst nur ein bisschen Geduld besitzen, da es teilweise recht lange dauern kann, Fehler zu finden.
Mein Pokemonspiel hat zum Schluss mehr als 50 Klassen besessen.
Dies wird dir bei deiner Engine früher oder später auch passieren, also verzweifel nicht.


----------



## skimmo (30. Jul 2014)

Also ich würde sagen ihr habt mich jetzt genug darauf aufmerksam gemacht wie schwer und wie viel Arbeit das ist. Ich mache das hauptsächlich für YouTube Tutorials und es ist auch nicht schlimm wenn ich es nicht schaffe ich werde dann daraus lernen und es vielleicht irgendwann nochmals versuchen. 
Zu YouTube: ich programmiere Vorher schon und schreibe das dann nochmal und erkläre alles damit es nicht zu Fehlern kommt und ich das Video immer unterbrechen muss.
Jetzt kommt erstmal was ich bis jetzt alles habe und was geplant ist:

- Einfache Erstellung eines JFrames mit einem dazugehörigen JPanels auf das mit einstellbaren Fps gezeichnet werden kann.
- Einfaches Hinzufügen eines Hintergrundes oder einer Hintergrundfarbe und Vordergrundfarbe
- Einfache Weitergabe der Graphics
- ein ganz kleines Audiosystem  zum einfachen Wiedergeben von Sounds.

In näherer Zukunft geplant (die nächsten Tage):
- GUI 
Menü
Optionen
- Maus und Tastatur Listener
- Entitys
das alles erstmal nur grob und das werde ich dann im Laufe der Zeit verbessern.


----------



## lord239123 (30. Jul 2014)

Wie heißt denn dein Youtube Kanal?
Hast evtl. schon das erste Video dafür fertig?


----------



## skimmo (30. Jul 2014)

@lord239123
YouTube Kanal ist schon erstellt aber es ist noch kaum was drauf. Sobald ich ein Video hochgeladen habe poste ich den Link keine Sorge


----------



## skimmo (3. Aug 2014)

Das mit den Videos auf YouTube dauert noch ein bisschen, da ich keine Zeit dazu hatte und bin jetzt die Woche über auch nicht da deswegen werde ich hier auch nichts schreiben, höchstens mal kurz reingucken.
Gruß
Skimmo


----------



## lord239123 (10. Aug 2014)

Gibt es inzwischen schon erste Fortschritte bei der Engine?


----------



## skimmo (11. Aug 2014)

lord239123 hat gesagt.:


> Gibt es inzwischen schon erste Fortschritte bei der Engine?


War jetzt ne Woche lang nicht da aber ich mache jetzt mit Listenern und GUI weiter. Ich lade auch noch die aktuelle Version hoch. Hier kannst du immer nach der aktuellen Version gucken falls es dich interessiert wenn du ne frage hast schick mir einfach ne pn.


----------



## Bananabert (27. Aug 2014)

Moin moin,

wird hier in näherer Zukunft noch etwas erscheinen ? Bin ein wenig gespannt auf die Tutorials.


----------



## skimmo (4. Sep 2014)

Tut mir leid, dass es so lange dauert aber Schule ist im Moment recht viel und bei YouTube muss ich noch was mit Freunden klären aber wenn es soweit ist sag ich bescheid. Ich versuche so schnell wie möglich mit den Videos zu starten.


----------

