Zum Aufbau meiner Engine!!!



  • Hi!
    Ich bin gerade dabei meine eigene Engine zu entwickeln!ICh werde die Engine in einer DLL schreiben!ICh weiß aber nicht genau,wie ich sie aufbauen soll!
    Es gibt 2 Möglichkieten:
    1.Ich exportiere zum Rendern, nur eine Klasse, die sich RenderDevice nennt!In der Klasse sind dann Objekte anderer Klassen der Engine vorhanden, wie z.b. der Skinmanager!Ein Beispiel:RenderDevice->GetSkinManager->AddSkin
    So bräuchte der Benutzer nur ein Objekt zu erstellen und mit diesem kann er dann jegliche Grafik rendern und musss sich nicht mit unnötig vielen Objekten rumschlagen!

    2.Ich exportiere einfach alle Klasse und wenn der Benutzer eine braucht, muss er sich ein Objekt dieser Klasse erstellen!

    Was meint ihr, welcher weg besser wäre?



  • Ich find das 1. besser, was allerdings den nachteil hätte das ungebrauchte objekte erstellt werden... oder? Ich würde aber trotzdem das 1. nehmen



  • Braucht man denn nicht trotzdem alle Klassen oder woher soll sonst SkinManager.AddSkin() bekannt sein?

    Bye, TGGC (Der Held ist zurück)



  • Ich glaub er meint, ob man als Benutzer alles selbst hantieren muß.

    RenderDevice->GetSkinManager()->AddSkin("fell.jpg");
    

    Aber im Grunde halt egal wie man es macht, ist halt etwas übersichtlicher, als wenn man als Benutzer sowas macht:

    Skin *skin = new Skin("fell.jpg");
    getSkinMananager()->add(skin);
    

    Eigentlich egal, ist doch eh alles Geschmackssache, wie ich finde. Wenns nicht zu verwirrend ist, kommt man als Coder mit beiden Varianten zurecht. Die Engine kann aber auch beide Varianten anbieten. Ist doch alles ziemlich trivial...


  • Mod

    sollange es nur einen heap gibt, ist es egal. wenn es mehrere heaps gibt z.b. wenn man eine release und eine debug runtime nutzt (bei windows msvcrt(d).dll), dann muss das objeckt in dem modul "delete" werde wo es erstellt wurde, sonst gibt es eventuell aussetzer an unerwarteten stellen.

    rapso->greets();



  • Alles über ein einziges Objekt zu steuern stelle ich mir auch unübersichtlich vor weil dieses Objekt dann ziemlich viel können muss.
    Ich habe es bei mir so gemacht dass man eine CRenderer, eine CLevel und eine CKamera erstellen muss. Die werden sich dann gegenseitig bekannt gemacht und arbeiten miteinander. So kann ich zB die Kamera beliebig manupulieren und auch auf Daten aus dem Level wie zB Lichter zugreifen.
    Ob dieses Konzept am Ende auch noch so schön aussieht weiß ich nicht, ich schreib immer einfach drauf los und schau was dabei rauskommt.

    Schwierig finde ich die Frage: Was muss die "Engine" alles können, was sollte man im Spiel machen. Wenn die Engine zuviel kann ist man vielleicht auf bestimmte Spielarten beschränkt (zB Egoshooter), wenn sie wenig kann ist sie flexibler aber dafür muss man im Spiel wieder mehr schreiben.
    Naja...ich mach halt mal, ändern kann man immer mal wieder was 🙄



  • Ich würde dann eher dahin tendieren, das es z.b. eine CRender.CreateCamera() Funktion gibt, die einem eine Kamerainstanz erzeugt und das "Bekanntmachen" automatisch erledigt. Denn hat eine Kamera auch ohne Renderer Sinn? Wahrscheinlich nicht. So muss man weder mit einer einzigen (komplizierten) Klasse arbeiten, noch kann man vergessen, irgendwo etwas bekannt zu machen. MicroSoft hat sich bei DX ja auch an meinen Vorschlag gehalten, und es ward gut.

    Bye, TGGC (Der Held ist zurück)


Anmelden zum Antworten