Geschwindigkeitsunterschiede

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

mathias

Betreff: Geschwindigkeitsunterschiede

BeitragDi, Feb 14, 2006 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe ein Spiel geschrieben, in dem der Spieler die Möglichkeit hat, ein Hilfsgitternetz ein- und auszuschalten. Da ich mit Doublebuffering, also mit dem CLS- und Flip-Befehl arbeite, wird das Spiel beim Zeichnen des Gitternetzes deutlich langsamer. Ich benutze die Rect-Funktion innerhalb von For-Next-Schleifen, um dieses Gitter zu erzeugen. Ich gehe mal davon aus, dass ein schnellerer Rechner dies in wesentlich kürzerer Zeit schafft. Was kann ich tun, um sicher zu gehen, dass das Spiel immer gleich schnell ist ? Da für die Spielfigur nur ein minimaler Teil des Bildschirmes neu gezeichnet werden muss, komme ich vielleicht auch ohne Doublebuffering aus. Das habe ich bereits mit der Delay-Funktion probiert. Leider ist das Spiel dann nicht so flüssig. Kann mir jemand helfen ? Sad

Vielen Dank im Voraus

robotx

BeitragDi, Feb 14, 2006 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Auf keinen Fall Delay benutzen, da dann das ganze Programm angehalten wird. Es wird dann gar nichts mehr berechnet.
Besser ist "Frameunabhängiges programmieren".
Hier im FAQ und Tutorial Bereich gibt es ein gutes Tut darüber:
https://www.blitzforum.de/viewtopic.php?t=3065
www.botbomb.robotzgames.de
www.robotzgames.de

Blitzard

BeitragDi, Feb 14, 2006 18:10
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Creatimer
Waittimer


Edit:// Boah verflucht warum funktioniert BB code net^^
User posted image
 

mathias

Betreff: Eine weitere Frage

BeitragDi, Feb 14, 2006 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Alles klar, danke. Leider stellt sich mir eine weitere Frage. Wie bekomme ich mittels Eurer vorgeschlagenen Methode eine künstliche Zeitverzögerung hin ? Um es mal extrem auszudrücken soll sich die Figur in Level eins alle viertel Sekunde einen Schritt weiterbewegen, während sie mit steigendem Level dies schneller, also z.B. alle zehntel Sekunde tut ? Mit einem Counter komme ich dann scheinbar nicht weit. Mit WaitTimer vielleicht ?

Hubsi

BeitragDi, Feb 14, 2006 23:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Eine Möglichkeit (welche ich persönlich dafür nicht verwenden würde) ist ql:MilliSecs(). Um eine Beschleunigungskurve zu erhalten wäre es vorteilhaft eine speed-Variable zu benutzen:Code: [AUSKLAPPEN]
If KeyDown(run_away_right)
 speed#=speed#+0.25 ; Beschleunigen
 If speed#>4.0 speed#=4.0
EndIf
If KeyDown(run_away_left)
 speed#=speed#-0.25 ; Beschleunigen
 If speed#<-4.0 speed#=-4.0
EndIf

If Not (KeyDown(run_away_right) Or KeyDown(run_away_left))
 If speed#>0.0 speed#=speed#-0.33 ElseIf speed#<0.0 speed#=speed#+0.33 ; Bremsen
 If speed#<0.3 And speed#>-0.3 speed#=0.0 ; "Rechenungenauigkeit" ausgleichen
EndIf

player_x=player_x+speed#


Edit: Möglicherweise hab ich Dich auch falsch verstanden, wenn ich die Frage nochmal grade so lese Very Happy Aber vom Prinzip her würds genauso funktionieren Very Happy
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 15, 2006 2:20
Antworten mit Zitat
Benutzer-Profile anzeigen
@Blitzard, das frameunabhängige Programmieren somit zu realisieren das man CreateTimer und WaitTimer benutzt, ist sicherlich eines der schlechtesten Varianten. Auch hier wird zum einen nicht sichergestellt das ein Spiel auf allen Rechnern 'gleich' schnell läuft. Es wird immernoch eine Mindestrechnergeschwindigkeit vorrausgesetzt! Wenn dies ein Rechner nicht bewergstelligen kann, dann wird's langsam. Ausserdem läuft dann ein Spiel auf einem Highend-Rechner immernoch so blöde ruckelig wie es der Programmierer mal vor Jahren vorgesehen hat.

Ich kann dazu nur empfehlen das ganze mit MilliSecs zu machen und alle Bewegungen und Beschleunigungen, mit der zeitlichen Relation zwischen den Schleifenzyklen, zu multiplizieren. Nur so wird garantiert das ein Spiel auf allen Rechner gleich schnell durchgeführt wird. Ob nun ruckelig weil der Rechner von Vorgestern ist oder fliessend...

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group