Seite 4 von 4

Verfasst: 25.10.2005 17:09
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:

Verfasst: 25.10.2005 18:38
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...

Verfasst: 25.10.2005 18:40
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!

Verfasst: 25.10.2005 19:40
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

Verfasst: 25.10.2005 20:38
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...

Verfasst: 06.11.2005 10:29
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.