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
