OK,
Kleine Anleitung wie man Spiele Programmiert.
Ein Thread erzeugt alle 16.6 ms ein neues Frame – schneller macht heute bei TFT’s mit 60Hz keinen Sinn. Klar gib es auch schnellere TFT’S! Aber bleiben wir mal bei diesen 60Hz
Man benötigt also eine Routine die so ein neues Frame erzeugen kann.
Die Main-Game-Loop sieht also im groben so aus:
Delphi-Quellcode:
begin
while InGame do
begin
Timer.Start;
NewFrame := GameEngine.GetFrame;
Timer.Stop
if Timer.Elapsed < 16.6666 then
GameEngine.PreprocessnextFame(16.66 – Timer.Elapsed); // Zeit nutzen sonst sleep
MainScreen.BeginUpdate
try
MainScreen.Assign(NewFrame);
finally
MainScreen.EndUpdate
end;
end;
end;
Außerhalb gibt s noch die Maus/Keyboard Abfrage die ihre Daten an die Gameengine weiter gibt.
Wer das nicht im Thread machen möchte (also für Anfänger einfacher) nimmt einfach einen Timer.
Den stellt man auf 15. Wirklich schneller geht es eh nicht.
Jetzt zu PacMan: Man braucht:
Einiges an array’s und Definitionen
StartPos Geister und PacMan, Imagefolge für die Bewegungen in allen Richtungen, Variablen für Position und Richtungen.
Am besten je ein Object pro Geist und PacMan mit allen Daten
Neben den „hochauflösenden“ X/Y Positionen, führt man intern ein LowRes Array mit der Position mit. Einfache XY Koordinaten. Um Wende und andere Objekte zu finden.
Ein Aufruf von GameEngine.GetFrame erzeugt also genau ein Frame und entscheidet wo was gemalt werden muss.
Nicht jeder Frame muss alles bewegen. Ggf. bewegt sich ein Geist nicht, weil er sich nur alle 2 Frames bewegen darf (sonst ist er zu schnell) oder die Power-Points blinken halt auch nicht mit 60Hz. USW.
So das war es erstmal für den Anfang.
Mavarik
PS.: Das gelöschte vom letzten Posting