Sprite bewegt sich zu schnell...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Baltazzar
Beiträge: 6
Registriert: 06.06.2006 19:04
Wohnort: Nettetal
Kontaktdaten:

Sprite bewegt sich zu schnell...

Beitrag 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??
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Bei mir bewegt sie sich auch normal. :mrgreen:
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

Guck dir mal den befehl an vielleicht hilft er dir weiter:

Code: Alles auswählen

ElapsedMilliseconds()
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Baltazzar
Beiträge: 6
Registriert: 06.06.2006 19:04
Wohnort: Nettetal
Kontaktdaten:

Beitrag 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...
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Ja!
Beiträge: 271
Registriert: 02.01.2006 16:13
Wohnort: Stuttgart

Beitrag 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
Mr.Hahn
Beiträge: 62
Registriert: 09.09.2005 18:24

Beitrag 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:
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten