Frames-Ruckel-Problem
Übersicht

![]() |
SwordfishBetreff: Frames-Ruckel-Problem |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ich bin schon eine ganze Weile an meinem ersten Spiel (natürlich ein Space-Shooter) am basteln, aber ich scheitere kläglich an meinem Frames Problem:
Durch "Flip" habe ich natürlich immer genau soviele FPS im Spiel wie Hz des Monitors. Leider ist das absolut unschön für mein Spiel, da das Spiel dann auf unterschiedlichen PCs unterschiedlich schnell läuft, zB. die Geschwindigkeit, mit der die Sterne runterscrollen (1pixel pro frame). Meine unschöne Lösung dazu sieht so aus: BlitzBasic: [AUSKLAPPEN] ;*** Framessperre *** Leider gibt das unschöne Ruckler zwischendurch, und das sieht ganz schön dämlich aus. Das Spiel wird unspielbar. Gebt mir ein Tipp was ich hier machen kann. Zudem würde ich gerne wissen wie diese Framesperre hier funktioniert, entnommen aus dem Blitz2D Sample "insectoids.bb": BlitzBasic: [AUSKLAPPEN] While Not KeyHit(1) Ich bendanke mich. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Als Anfänger könntest du immerhin versuchen "Suchen" zu nutzen oder in die FAQ & Tutorial Sektion zu schauen ...
Die ganzen User hier schreiben die Tutorials nämlich nicht aus reiner Langeweile: https://www.blitzforum.de/viewtopic.php?t=3065 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kompliziertere, aber recht elegante Lösung ist das ganze frameunabhängig zu programmieren, Suco-X hat dazu mal ein Tut geschrieben, wenn ich nicht irre. Zweite Möglichkeit wäre Flip 0 und Waittimer zu verwenden. Mehr fällt mir spontan nicht ein, rate Dir aber zur ersten Lösung ![]() Edit: Zu spät und dann auch noch den Author verdreht ![]() ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
- Zuletzt bearbeitet von Hubsi am Di, März 29, 2005 22:08, insgesamt einmal bearbeitet
konstantin |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Schau in der Onlinehilfe mal nach WaitTimer und CreateTimer.
Es gibt ähnliche Codes wie Dein Sample, die findest du schnell mit der Suche. |
||
![]() |
Swordfish |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ Dreamora
Nun ich habe mir schon einige Tuts durchgelesen, aber auch bei dem verlinkten Tutorial steht nicht, wie mach das ganze ohne Delay bzw ohne Ruckeln im Spiel hinbekommt. Trozdem danke. |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das Problem ist, du versuchst tweening nachzubauen (der zweite Source den du hast), was eine der zwei Möglichkeiten für frameunabhängige Programmierung ist.
Nur hast du leider nicht verstanden wie er funktioniert, weswegen er bei dir nicht "fliessend" läuft sondern durch die Ifs Zeitsprünge drin hat. Das ist allerdings nicht schlimm, denke damit haben noch so einige Probleme (ich habe den Sinn darin bis heute nicht so wirklich erkannt. Vielleicht bei 3D mit animierten Objekten, aber ansonsten net). Die andere Variante ist alle deine Bewegungswerte ( oder veränderungswerte im allgemeinen ) einfach durch FPS zu teilen bevor du sie zuweist und Flip 0 benutzen. Dadurch gibt es einen konstanten Wert der pro Sekunde genommen wird welcher für jedes System gleich ist. Dann sollte das eigentlich klappen. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Suco-XBetreff: ...... |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das oben ist zwar eine Lösung, aber wegen den Stufungen ist das schlechter Übergang. Ruckel Ruckel. Habe mal ein Beispiel mit der anderen Möglichkeit gemacht, das mir persönlich am besten liegt.
Code: [AUSKLAPPEN] Graphics 1024,768,16,1 SetBuffer BackBuffer() Type TStar Field x#, y# Field Speed# End Type Function CreateStar(x#,y#,Speed#) Local TempStar.TStar = New TStar TempStar\x = x TempStar\y = y TempStar\Speed = Speed End Function Function RenderAndUpdateStars() For TempStar.TStar = Each TStar TempStar\x = TempStar\x-(GameSpeed*TempStar\Speed) Plot TempStar\x, TempStar\y If TempStar\x<0 Delete TempStar EndIf Next End Function Global LoopStart = MilliSecs() Global GameSpeed# = 0.0 Global WunschFPS = 60 Local FPS, TFPS,FpsStart Local StarTimer = MilliSecs() Repeat Cls GameSpeed = MilliSecs()-LoopStart GameSPeed = (GameSpeed/1000.0)*WunschFPS LoopStart = MilliSecs() If MilliSecs()-StarTimer=>50 CreateStar(GraphicsWidth(),Rnd(0,GraphicsHeight()),2.0+Rnd(0.1,7.0)) StarTimer = MilliSecs() EndIf TFPS = TFPS+1 If MilliSecs()-FpsStart>1000 FPS = TFPS TFPS = 0 FpsStart = MilliSecs() EndIf RenderAndUpdateStars() Text 0,0,"FPS: "+FPS Flip 0 Until KeyHit(1) Wichtig hierbei ist natürlich das die Bewegungen mit Floats berechnet werden. Zu jeder Bewegung im Game wird GameSpeed Multipliziert und gut ist. Nur mal als schubs in eine Richtung. Ah, Sorry wegen Plot. Wollte aber nicht durch komplexere Sachen wie WritePixelFast vom eigentlichen Sinn des Sources ablenken Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
![]() |
Swordfish |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wohhooo! Danke - so klappts wie ich mir das vorgestellt habe ! ![]() |
||
![]() |
Suco-XBetreff: ........ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Np. Falls du noch fragen dazu hast, fragen.
Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group