Seite 1 von 2

Sprite bewegt sich zu schnell...

Verfasst: 15.06.2006 17:20
von Baltazzar
Hallo!
So, das hatte ich noch nie und ich bin kurz vorm durchticken... Also, ich habe in meinem kleinen Projekt, dass schon ziemlich weit fortgeschritten ist, ein Sprite welches ich mit den Pfeiltasten bewege. Ist ja überhauptkein Problem, wenn eine Taste gedrückt wird verändert sich di X/Y Position um +/- 1. Das Sprite bewegte sich bis heute in einem normalen Tempo. Doch dann startete ich das Programm eben und auf einmal bewegt sich das Sprite ultraschnell. Auch wenn ich einen total simplen Code wie folgt verwende, habe ich Probleme mit dem Tempo der Box:

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"")
Repeat
 StartDrawing(ScreenOutput())
  Box(x,y,50,50,RGB(255,0,0))
  ExamineKeyboard()
  If KeyboardPushed(#PB_KEY_LEFT)
   x-1
  ElseIf KeyboardPushed(#PB_KEY_DOWN)
   y+1
  ElseIf KeyboardPushed(#PB_KEY_RIGHT)
   x+1
  ElseIf KeyboardPushed(#PB_KEY_UP)
   y-1
  EndIf
 StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_KEY_ESCAPE)
Also habe ich einfach mal PB neuinstalliert um es nochmal auszuprobieren. Leider hat dies nichts gebracht.
Nun habe ich die PB Demo auf einen anderen Computer installiert. Und was sehe ich da? Die Box bewegt sich ganz normal, so wie es auf meinem Computer, beidem ich gerade mein Projekt schreibe auch mal war.

Das macht mich doch schon wirklich leicht aggresiev^^
Hatte jemand sowas schonmal? Simpler Fehler oder total Bug??

Verfasst: 15.06.2006 17:26
von roherter
Bei mir bewegt sie sich auch normal. :mrgreen:

Verfasst: 15.06.2006 17:43
von PMV
Mögliche Veränderung:

Festplatte entrümpelt, Defragmentiert, neue Hardware (CPU, usw.)
:mrgreen: ... vielleicht mal nicht das Spiel im Hintergrund aktiv? :wink:

Ne Spaß bei seite, du bewegst dein Sprite immer um 1 Pixel, und das bei
jedem Frame ... was also bei dir als "normale Geschwindigkeit" bezeichnet
wird, ist abhängig von der Hardware der Rechner. Hast du einen schnellen
Rechner, siehst du das Sprite vermutlich nur so lange, wie du keine Taste
drückst :lol: ... hast du einen sehr alten PC, bewegt sich womöglich das
Sprite kaum bis garnicht . (ok das wäre dann ein wirklich alter PC *gg* )

Also ein Bug ist es sicher nicht, sondern ein Logickfehler. Aber so was
muss man ja auch erst mal lernen. Für die Suche wäre da z.B. interezant:
"Zeitsteuerung", "Zeitgesteuerte Bewegung" und so weiter :D

Damit kannst du dein Sprite dann in abhängig der Zeit bewegen, was ja
auf jedem System gleich ist :D

MFG PMV

Verfasst: 15.06.2006 18:11
von roherter
Guck dir mal den befehl an vielleicht hilft er dir weiter:

Code: Alles auswählen

ElapsedMilliseconds()

Verfasst: 15.06.2006 18:14
von Kaeru Gaman
mal ein skelett für simplen timer:

Code: Alles auswählen

FrameLength = 20
Timer = Elapsedmilliseconds() + FrameLength 

Repeat  ; Hauptschleife

  While Elapsedmilliseconds() <= Timer
    Delay(0)    ; nicht die CPU braten...
  Wend
  Timer + FrameLength 

Until Exit = 1 ; ende Hauptschleife
hab jetzt nur mal die Hauptschleife angedeutet, um die Timer-Warte-Schleife klar zu machen.

zu deinem Code würde ich außerdem empfehlen, grundsätzlich nur Zeichenbefehle zwischen Start/StopDrawing zu haben.
in diesem konkreten fall also einfach das StopDrawing vor das ExamineKeyboard verschieben...

Verfasst: 15.06.2006 23:42
von Baltazzar
was ich dann nur nicht verstehe ist dass es ja vorher geklappt hat. aufeinmal nach irgetneinen starten bewegte sich das Sprite so schnell.
Zum Code: Den hab ich nur kurz hier im Forum aufgeschrieben ohne groß nachzudenken. Sonst würde ich das anders machen...

Verfasst: 16.06.2006 00:42
von PMV
Und was sagt uns das?
Eventuell solltest du uns schon den Code geben, der dir Probleme macht
... leider gibt es keine Glaskugeln im Sonderverkauf ... und nicht jeder
kann sich die guten aus dem Fachhandel leisten :cry:

Was heißt denn "anders"? :wink: Nutzt du nun die zeitbasierte
Berechnung oder machst es doch auf die einfache Weise wie in deinem
ersten Post?
Und wenn es wirklich das Problem ist, wovon wir alle ausgehen ... da gibt
es tausend und eine Möglichkeit, warum dein PC ausgerechnet jetzt mehr
Zeit dafür hat. Aber wie schon gesagt, das Problem mit der Glaskugel :D

MFG PMV

Verfasst: 16.06.2006 08:39
von Ja!
PMV hat geschrieben: Ne Spaß bei seite, du bewegst dein Sprite immer um 1 Pixel, und das bei
jedem Frame ... was also bei dir als "normale Geschwindigkeit" bezeichnet
wird, ist abhängig von der Hardware der Rechner. Hast du einen schnellen
Rechner, siehst du das Sprite vermutlich nur so lange, wie du keine Taste
drückst

MFG PMV



Das ist nicht ganz richtig.

Das schnelle bewegen des Sprites ist nur der Fall,
wenn das VSync deaktiviert ist.

Also entweder benutzt er FlipBuffers(0) oder hat bei seinen
Grafiktreibern die VSync-deaktivierung erzwungen.
Danach würde ich mal schauen@ Baltazzar

Was anderes kann es eigentlich nicht sein..


Gruß
Udo

Verfasst: 16.06.2006 18:23
von Mr.Hahn
Genau daran liegts. Hatte ich bei mir auch...aber es ist sinnvoller mit nem Zeitabhängigen Timer zu arbeiten als mit nem "Programmdurchlaufabhängigen" :wink:

Verfasst: 16.06.2006 19:07
von PMV
-.- wen intereziert VSync ... jetzt bring die Anfänger nicht auf dumme
gedanken ... es ist einfach nicht möglich, anhand einer Frambegrenzung
vernünftige Bewegungen hin zu bekommen, die auf allen Systemen gleich
sind.

Naja wenigstens funzt deine Glaskugel ... aber das is ja unerheblich, es
geht darum, das er die Bewegung Frameabhängig hat und da sein
Denkfehler liegt, ... das er nun VSync deaktiviert hat ... ist ein glücklicher
zufall. :wink:

Und was anders kann es nicht sein ... ich hab genug Dinge aufgezählt, die
auch in frage kommen :? ... wenn die Wahrscheinlichkeit deren vielleicht
geringer ist. :D

MFG PMV