Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 03:50

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 29, 2006 10:42 
Offline
DGL Member

Registriert: Di Sep 19, 2006 13:24
Beiträge: 173
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)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 29, 2006 11:03 
Offline
DGL Member
Benutzeravatar

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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 29, 2006 11:03 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Code:
  1.  
  2. var LastTick,Currenttick:Cardinal;
  3.       DeltaT:single;
  4. procedure TForm1.onIdle(...);
  5. begin
  6.  Done:=false;
  7.  Currenttick:=gettickcount;
  8.  DeltaT:=0.001*(Currenttick-Lasttick);//DeltaT=Zeitdifferenz in Sekunden
  9.  if DeltaT>0.1 then DeltaT:=0.1;//Sprünge verhindern, max 100ms auf einmal
  10.  if DeltaT<0 then DeltaT:=0;//49.7 Tage Bug vermeiden *g*
  11.  if DeltaT<0.01 then begin sleep(1);exit;end;//Begrenzung auf 100FPS, vermeidet unnötige cpu-last
  12.  //TickCode begin
  13.  x:=x+vx*DeltaT;//Beispiel, vx in Pixel/Sekunde
  14.  y:=y+vy*DeltaT;//Beispiel, vy in Pixel/Sekunde
  15.  //TickCode end
  16.  LastTick:=Currenttick;
  17. end;
  18.  


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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Nov 29, 2006 13:19 
Offline
DGL Member

Registriert: Di Sep 19, 2006 13:24
Beiträge: 173
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 30, 2006 17:04 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Nov 30, 2006 19:49 
Offline
DGL Member

Registriert: Di Sep 19, 2006 13:24
Beiträge: 173
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.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 21 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

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.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.007s | 14 Queries | GZIP : On ]