Problem mit Timebased Movement [DEMO auf Seite 3]

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Frames konstant 74.
Pixel/Frame läßt sich nicht ablesen, nur schätzen bei der Geschwindigkeit: zwischen 4,x und 5,x - manchmal auch 6.
Ansonsten ruckelfrei. Mein System: siehe Profil :wink:
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Ja das ist normal, daß es auf 1 geht, ist also Absicht ;)

Mit der 6 liegt ihr also nur knapp drüber, das erklärt dann auch, wieso es bei euch nicht ruckelt...
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

@ crossroads: okay, so in etwa ist es bei mir auch. Nur halt nicht ruckelfrei ;)

Jetzt hab ich 'ne neue alte Grafikkarte drin, weil meine alte alte kaputt gegangen ist, und die neue alte ist noch älter als die alte alte ;) daher hab ich nur noch 10 Frames :shock: ich brauch jetzt echt mal 'ne neue Maschine!
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Also ich hab ebenfals 84 - 85 FPS ... die Werte selber sagen eigentlich nichts aus :wink:
Die zu bewegenden Pixel liegen bei 4,68 - 4,72 ... gehen eigentlich aus diesem Bereich nicht raus.

Allerdings glaub ich jetzt, ich weis was du meinst ...
Ich habs mir angeschaut mit festen Zahlen und ohne ... ohne kommt es vermehrt vor, das die Figur hin und her springt ... auf dauer wirklich blöd.

Du hattest ja das hier gepostet

Code: Alles auswählen

multiplicator.f = StartTime 
StartTime = timeGetTime_() 
PlayerPix.f = StartTime - multiplicator 
Aber du hast nicht gepostet, wie du PlayerX und PlayerY berechnest, gehört ja eigentlich auch dazu ... allerdings fällt mir bei dem obigen code auf, das du dort nur multiplizierst ...

Im folgenden ein Code wie ich die Geschwindigkeit berechnen würde:

Code: Alles auswählen

ExamineDesktops()
MitteX = DesktopWidth(0)/2 - 50
MitteY = DesktopHeight(0)/2 - 25

WindowX.f = MitteX
WindowY.f = MitteY - DesktopHeight(0) / 2 +  100

Window = OpenWindow(#PB_Any, WindowX, WindowY, 100, 50, 0, "Zeitgesteuert")
CreateGadgetList(WindowID())
TextGadget(0, 0, 5, 100, 20, "Klick mich!", #PB_Text_Center)
TextGadget(1, 0, 20, 100, 15, "", #PB_Text_Center)
TextGadget(2, 0, 35, 100, 20, "", #PB_Text_Center)


#Speed =  100  ;gewünschte Geschwindigkeit (Pixel pro Sekunde)
#PI = 3.14159265
#Umrechnung = 57.29578

Timer = ElapsedMilliseconds()
Repeat ;Hauptschleife
ExamineDesktops()
LastTime = Timer
Timer = ElapsedMilliseconds()
;If Timer <= LastTime : LastTime = Timer - 1 : EndIf ;eventuell, fals die Zeit pro Frame nicht 0 sein darf

Width = DesktopWidth(0)/2 - WindowX
Height = DesktopHeight(0)/2 - WindowY
If Width < 0 And Height <= 0 
  WindowWinkel=ATan(-Height/-Width)*#Umrechnung+90
ElseIf Width < 0 And Height >=0 
  WindowWinkel=ATan(-Width/Height)*#Umrechnung
ElseIf Width > 0 And Height > 0 
  WindowWinkel=ATan(Height/Width)*#Umrechnung+270
ElseIf Width >= 0 And Height <0 
  WindowWinkel=ATan(-Width/Height)*#Umrechnung+180
EndIf


WindowSpeed.f = (Timer - LastTime) / 1000 * #Speed ;berechnung der Geschwindigkeit in diesem Frame


WindowX + Cos(WindowWinkel * #PI / 180)  * WindowSpeed
WindowY + Sin(WindowWinkel * #PI / 180)  * WindowSpeed
MoveWindow(WindowX, WindowY)

FPSCounter + 1
If ElapsedMilliseconds() >= FPSTimer + 1000 : FPS = FPSCounter : FPSCounter = 0 : FPSTimer = ElapsedMilliseconds() : EndIf 
SetGadgetText(1, "FPS: "+Str(FPS))
Delay(10)
 
Until WindowEvent() = #WM_LBUTTONDOWN
Ich weis nicht ob dir das hilft oder wie auch immer ... :D Könntest ja auch versuchen dein Problem da irgend wie ein zu bauen oder zu suchen <)

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Also die Position wird ganz einfach berechnet durch PlayerX = PlayerX + multiplicator etc... wobei PlayerX natürlich Float ist ;)

Deinen Code muß ich mir erstmal genauer anschauen...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

noch ein kleiner tipp:

in so einer berechnung sollten sämtliche Werte float sein, sonst wird teilweise der typ gecastet,
damit wird ein teil (oder das ganze) eben zu integer...

grundsätzlich würde ich in so einem fall aber keine floats verwenden,
sondern eben integer, die tausendstel pixel angeben.
genauer als 3 nachkommastellen wird kaum vonnöten sein.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten