Ich werde mir das mal angucken aber eigentlich ist das ganze schon recht dynamisch, zumindest die Blöcke liegen in arrays und können in beliebiger Stückzahl durch Eintragungen im form1.create erzeugt werden.
Das ich alle Objeckte in einer List speichern soll, hm ich denke das probiere ich wenn ich das Spiel in OpenGl umschreibe, da muss ich ja eh die gesammte Zeichenroutine neu machen.
Das mit dem TimeBasedMovement auf einer Achse im leeren Dokument werde ich mal testen, das schwerre ist das das ganze ja manchmal wunderbar funktioniert, ohne den kleinsten Ruckler aber manchmal eben sogut wie garnicht klappt.. das macht es natürlich schwer Fehler auszuschließen weil man nie weiß ob nun der Fehler draussen ist oder der PC mal eine glückliche Stunde hat.. (liegt übrigens net an meinem Laptop, habe es auch auf 3 anderen PCs getestet)
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Probier das mal mit dem leeren Projekt aus.
Und das mit den Objekten in einer Liste. Das ist Objektorientiertes Programmieren. Und wenn man das gut beherscht, dann macht das einiges ungemein Einfach. Bzw ab einem gewissen Komplexibilitätsgrad ist es fast unmöglich. Das nur mal als Vorschlag um dir die Arbeit zu vereinfachen und es unanfälliger gegen Fehler zu gestalten.
DeltaT:=0.001*(Currenttick-Lasttick);//DeltaT=Zeitdifferenz in Sekunden
if DeltaT>0.1then DeltaT:=0.1;//Sprünge verhindern, max 100ms auf einmal
if DeltaT<0then DeltaT:=0;//49.7 Tage Bug vermeiden *g*
if DeltaT<0.01thenbeginsleep(1);exit;end;//Begrenzung auf 100FPS, vermeidet unnötige cpu-last
//TickCode begin
x:=x+vx*DeltaT;//Beispiel, vx in Pixel/Sekunde
y:=y+vy*DeltaT;//Beispiel, vy in Pixel/Sekunde
//TickCode end
LastTick:=Currenttick;
end;
gettickcount ist die Zeit in Milisekunden, also rechnet mein *0.001 die Zeit in Sekunden um. Das ist bei deinem Counter natürlich anders. Außerdem ist die Sprünge vermeiden Zeile bei mir mit 0.1 also 100ms angesetzt. Das hat die auswirkung dass das spiel bei <10FPS verlangsamt abläuft, da zu große DeltaTs bei vielen Codes ärger geben, und z.B. solange du ein Menü geöffnet hast, die schleife angehalten wird, und sonst beim fortsetzen ein srpung von mehreren Sekunden stattfindet.
Ich habe gerade bei The-Winners Tip das "if DeltaT>0.1 then DeltaT:=0.1;//Sprünge verhindern, max 100ms auf einmal" auskommentiert und siehe da nun geht alles.
Natürlich kann es wieder sein das mein Laptop einen guten Tag hat, wenn das nicht geht werde ich nochmal Lossys Tipp durchgehen aber ich bin hoffnungsvoll das mein Problem nun gelößt ist.
Die Zeile ist sinnvoll und nötig, du musst jedoch die 0.1 auf nen anderen wert ändern, falls du deine Zeit DeltaT nicht in Sekunden misst. z.B. falls du die Zeitdifferenz in /100 Sekunden misst, musst du statt 0.1 10 einsetzen, bei Millisekunden sogar 100.
Hast Recht, und tatsächlich kann man jetzt wärend des Spielens ins Menue gehen ohne das im Menue eine automatische Pausenfunktion Implementiert ist, sehr schön, danke.
Mitglieder in diesem Forum: 0 Mitglieder und 12 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.