Hi, ich schreibe an einer Game-Engine (welche ich vielleicht hier veröffentliche), ich bin jetzt an einem Punkt wo es um die Einstellungen geht. Meine Frage ist jetzt, ob die Game-Engine das Fenster erstellt, oder ob das Programm der Engine ein Fensterhandle übergibt.
Meine Engine ist soll die Logik (oder wird das von Spiel selbst gemacht und nicht in derEngine eingebunden?) und das Darstellen übernehmen. Bis jetzt denke ich ist sie Plattform unabhängig, ich muss jetzt allerdings eine Möglichkeit finden wie ich Fenster plattformunabhängig mache (oder sind das die Delphi 5 Fenster schon).
Für einen eventuellen Editor sollte sie allerdings auch auf einem Panel etc. darstellbar sein.
Deine Engine sollte nur einige einfache Schnittstellen zur Anwendung haben. Beispielsweise könnte das so aussehen, also deine Engine bietet die folgenden Methoden an: initializeGL(), paintGL(), resizeGL(int width, int height) Dann brauchst du noch die Möglichkeit irgendwie an Tastatur bzw. Mausevents zu kommen, fertig.
Ok, ich hatte mir das so ähnlich gedacht war mir aber nicht sicher. Vorallem wie ich an Tastatur- und Maus-Events kommen soll, ohne das ich sie den onKeyPress etc der Form zuweise ist mir noch nicht ganz klar.
Registriert: Do Sep 02, 2004 19:42 Beiträge: 4158
Programmiersprache: FreePascal, C++
Ich würde der Engine noch entsprechende Methoden geben, die du dann in den Events der Form aufrufst.
greetings
_________________ If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung. current projects: ManiacLab; aioxmpp zombofant network • my photostream „Writing code is like writing poetry“ - source unknown
„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb
ich muss jetzt allerdings eine Möglichkeit finden wie ich Fenster plattformunabhängig mache (oder sind das die Delphi 5 Fenster schon).
Nein, die Delphi-Fenster funktionieren nur unter Windows. Aber es gibt eine recht einfache Möglichkeit, simple plattformunabhängige Fenster zu erstellen: SDL. Im Wiki gibt es ein gutes Tutorial dazu: Tutorial_SDL_Einstieg.
mori hat geschrieben:
Für einen eventuellen Editor sollte sie allerdings auch auf einem Panel etc. darstellbar sein.
Das ist schon schwieriger plattformunabhängig umzusetzen. Entweder zeichnest du die Fensterinhalte mit OpenGL, googel dafür mal nach OpenGL GUI.
Oder du erlaubst es dem Benutzer der Engine einfach zusätzlich, auch auf einem beliebigen Fenster zu zeichnen, das über das Handle definiert ist. Du kannst ja beide Möglichkeiten parallel als Alternative anbieten.
Registriert: Di Mai 18, 2004 16:45 Beiträge: 2623 Wohnort: Berlin
Programmiersprache: Go, C/C++
Die Frage wird die verschiedensten Antworten zu tage fördern, da es schon an der Interpretation von Engine unterschiedliche Definitionen gibt und in der Regel sind auch die meisten richtig. Also gucke wir mal in existierende Software. Graphic Engine: Ogre3D hat ein Fenster-Interface welches auf verschiedene Bibliotheken wrappt und je nach compilersettings eines verwendet(erzeugt selber). Irrlicht macht das gleiche(erzeugt selber). Game Engine: Unreal Engine 3 nutzt wxWidget und auf consolen die entsprechende api(erzeugt selber). jMonkey(wenn ich das richtig nachgeschlagen habe nutzt es swing,awt und swt welches vom user programm fest glegt wird) Unity3D nutzt die jeweilige FensterAPI des OS bzw. Browser Framebuffer(erzeugt selber)
Also die meisten Framework/Engines erstellen das Fenster selber, da man so mehr gewalt und weniger Fehlerquellen hat. Man müsste ja sonnst dem Entwickler das umwandeln von Fensterevents, Tastaturcodes, Mauscodes und anderen Devices und Typen überlassen und das ist wirklich nicht einfach. Ich bevorzuge die Auswahl zwischen den einzelnen Möglichkeiten aber überlasse dem Framework die Implementierung und pflege. Dies realisiere ich durch ServiceProvider oder ServiceLocator aus der Java Welt bekannt. Ein ServiceLocator wäre in dem Fall WindowServiceLocator und dann kann man von WindowService abgeleitete Klassen schreiben und im ServiceLocator registrieren. Vor dem start der Application(Window/Gameloop) wähle ich also den gewünschten Service aus und setze ihn als Default. Sollte wer nicht mit einer Implementierung zufrieden sein kann er sich ein klon machen und änderungen dran vornehmen und diesen noch zu den WindowServices hinzupacken ohne die anderen zu unterdrücken bzw. zu stören. Fenster im Spielebereich, auf PC, kann man eigentlich total simpel halten, indem man 3 Funktionen einbaut, Resize, StayOnTop und SetPosition. Man vergrößert das GameFenster auf die Größe der Auflösung+Fensterrahmen und positioniert dann das Fenster so, das der rahmen ausserhalb des bildes liegt und setzt den fenstertyp auf dialog(stayontop). Das sind 3 Befehle und dann noch die Windowloop, leichter gehts nicht. Ich bastel allerdings Frameworks und hab entsprechend wesentlich mehr in meinen Interface und das hat seinen Preis(kostet viel zeit zum portieren auf eine weitere Platform).
_________________ "Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren" Benjamin Franklin
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.