Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi 8Bit Game Engine (https://www.delphipraxis.net/178494-8bit-game-engine.html)

milos 11. Jan 2014 04:18

8Bit Game Engine
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DPler ;)

Ich habe mich nach einer kurzen Planung mal an den versuch gemacht meine eigene kleine 8Bit Game Engine zu programmieren.
Um zu zeichnen benutze ich vorerst Direct2D. Wenn ich mich jedoch genug in die Materie einer Game Engine eingearbeitet habe, werde ich wohl auf Lazarus und OpenGL zurückgreifen, da multiplatform :)

Ich habe schon etwas kleines hingekriegt und zwar habe ich mehrere Klassen erstellt die ich später für das Spiel brauchen werde wie Gameobjekte, Sprites usw. jedoch sind sie nicht ausgereift und 100% abgeschlossen.

Ich habe nun einige Fragen, zu Sachen, bei denen ich mir nicht sicher bin wie ich sie lösen sollte.

Mein grösstes Problem ist wohl die Game-Loop.
Wie soll ich diese entwickeln? Momentan habe ich einfach eine while Runtime.IsRunning do loop genommen und es funktioniert auch, jedoch denke ich, dass es dafür bessere Lösungen gibt oder etwa nicht?

Die Performance ist auch nicht gerade die beste. Als Test habe ich 128x72 gerendert und auf 1280x720 gestreckt und bekomme ca. nur 20 FPS mit der while schleife. Habe auch Timer versucht, jedoch sind diese bei zu niedrigen Intervallen buggy.

Ab und zu (vorallem wenn man viel mit der Fenstergrösse spielt) kommen Exceptions aber leider, kann ich mit diesen nicht wirklich was anfangen. Beim debuggen kommen aber die Exceptions komischerweise selten bis nie.

Wie kann ich am besten die FPS zählen? Die generierungszeit eines Frames nehmen und auf eine Sekunde rechnen oder doch lieber die Frames zählen?

Ich wäre froh wenn sich mal einer den Code anschauen könnte, und mir sagen könnte was es zu verbessern gibt und wenn einer ne Lösung für eins meiner Probleme hätte wäre ich auch sehr dankbar dafür. :D Wie gesagt, bin totaler neuling in dem gebiet :)

Im Anhang ist der Source Code und das Kompilat zu finden. Der Fenstertitel ist die Frameanzahl die seit start gezeichnet wurden. Die Runtime kann man bisher nur mit Escape beenden.

Ich bedanke mich schon mal im vorraus für nützliche tipps :)

MfG

Edit: Ach ja der Code ist hässlich, aber ich kenne ihn wengistens ziemlich gut, auch wenn ds projekt nicht gerade gross ist ^^

Sir Rufo 11. Jan 2014 05:43

AW: 8Bit Game Engine
 
Schau dir mal das hier an

http://smartmobilestudio.com/Smartde...and/index.html

http://showcases.smartmobilestudio.c...ssile-command/

Den Quelltext gibt es auch. Der ist zwar in DWScript aber passt fast 1:1 auf Delphi.
Zudem geht es dir ja auch um die Game-Loop und dafür ist das ein gutes Beispiel.

Medium 11. Jan 2014 13:47

AW: 8Bit Game Engine
 
Die meisten Game-Loops haben, zumindest ganz aussen drum rum, in etwa diesen Aufbau:
Delphi-Quellcode:
while true do
begin
  HandleUserInputs;
  ModifyWorldAccordingToInputsAndMechanics;
  DrawNextFrame;
  ShowFrame;
end;
Um die FPS zu zählen bietet es sich eher an die geschafften Frames in einer gewissen Zeitspanne zu zählen und auf eine Sekunde umzurechnen, da die Timer sonst dafür etwas ungenau werden können.

Deine geringe Framerate würde ich weniger auf die verwendete Schleifenart noch auf Direct2D zurück führen. Ich vermute eher stark, dass deine eigentlichen Zeichenvorgänge da die Schhuldigen sind. (Die Art der Schleife macht praktisch gar keinen Unterschied - so lange man Timer mal aussen vor lässt, die dort eh nichts zu suchen haben, und D2D ist für sich genommen durchaus in der Lage dazu viele FPS zu zaubern.)

milos 11. Jan 2014 16:07

AW: 8Bit Game Engine
 
Ok, danke für die hilfreichen antworten :)

Werde mir das spiel mal genauer ansehen, ist echt interessant interessant was der gemacht hat :D

Werde mir auch mal meinen source genauer ansehen, vielleicht kriege ich die performance ja etwas verbessert ^^

MfG

Mavarik 11. Jan 2014 16:54

AW: 8Bit Game Engine
 
Habe ich was übersehen? Was ist eine 8Bit Engine ?

Sir Rufo 11. Jan 2014 16:56

AW: 8Bit Game Engine
 
Zitat:

Zitat von Mavarik (Beitrag 1243186)
Habe ich was übersehen? Was ist eine 8Bit Engine ?

Wer verliert muss sich besaufen :cheers:

Mavarik 11. Jan 2014 16:58

AW: 8Bit Game Engine
 
Zitat:

Zitat von Sir Rufo (Beitrag 1243187)
Zitat:

Zitat von Mavarik (Beitrag 1243186)
Habe ich was übersehen? Was ist eine 8Bit Engine ?

Wer verliert muss sich besaufen :cheers:

Sorry für mich nur Bit-Drive ich muss noch fahren.

Sir Rufo 11. Jan 2014 17:06

AW: 8Bit Game Engine
 
Zitat:

Zitat von Mavarik (Beitrag 1243188)
Zitat:

Zitat von Sir Rufo (Beitrag 1243187)
Zitat:

Zitat von Mavarik (Beitrag 1243186)
Habe ich was übersehen? Was ist eine 8Bit Engine ?

Wer verliert muss sich besaufen :cheers:

Sorry für mich nur Bit-Drive ich muss noch fahren.

Hoffentlich nicht auch Bit-Drive (aus oder Vollgas) :mrgreen:

Aphton 11. Jan 2014 17:45

AW: 8Bit Game Engine
 
8Bit Engine.. auch unter dem Namen 1Byte Engine bekannt..

milos 11. Jan 2014 18:11

AW: 8Bit Game Engine
 
Wikipedia

Mein Ziel ist es halt eine (8Bit) Game Engine zu basteln mit der man ganz einfach so eine Grafik hinbekommt wie früher zu NES Zeiten. Es gibt immer noch Spiele die trotz so einer Grafik sehr bekannt geworden sind. z.B. ist zur Zeit Startbound in ziemlich grosser Titel.

MfG

Edit: Wollte noch erwähnen, dass ich bisher schon einige Sachen gefixt habe und in der Version die ich hier hochgeladen habe ist noch ein Fehler drin, der den Speicherbedarf auf über 1GB schiesst und das Programm dann anschliessend abstürzt. Ist mittlerweile aber behoben


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz