Objekte in xx Milisekunden xx Pixel bewegen
Übersicht

DüsiBetreff: Objekte in xx Milisekunden xx Pixel bewegen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Moin,
ich bin gerade bei einer Bewegungsroutine eines Netzwerkspieles. Vorweg: Das Spiel basiert auf einer Tilemap mit 32x32px größe. So, nun zum Problem. Ich dachte mir, dass wenn sich ein Spieler zum nächsten Tile bewegen möchte, schickt er ein Paket alâ Zitat: TileX <-- = |
TileY <-- = Tile, zu dem sich der Spieler bewegt MoveTime <-- Zeit, die ihm zum Bewegen bleibt, also Millisecs()+Zeit zum bewegen Somit weiß dann ja jeder Spieler, bis zu welchem Zeitpunkt der Spieler an der Position sein muss und kann ihn dann in entsprechender Geschwindigkeit dorthin bewegen... Und genau das will einfach nicht so recht klappen. :/ Jeder Spieler weiß also über den zu bewegenden Spieler -> Zitat: Aktuelle Position
Position, die erreicht werden muss Verbleibende Zeit zum bewegen und mein Ansatz dazu -> Code: [AUSKLAPPEN] If object_moveTime <> 0 Then
; Zeit objectMoveTime = object_moveTime-MilliSecs() ; (die verbleibende zeit) If objectMoveTime < 0 Then objectMoveTime = Abs(objectMoveTime) EndIf If objectMoveTime = 0 Then objectMoveTime = 1 EndIf ; Differenz berechnen objectDiffX# = object_moveToPosX - object_posX# ; objectDiffX -> differenz, object_moveToPosX -> die position die erreicht werden mus, object_posX -> die aktuelle position objectDiffY# = object_moveToPosY - object_posY# If objectDiffX# <> 0 Then objectMoveX# = objectDiffX# / objectMoveTime If objectDiffY# <> 0 Then objectMoveY# = objectDiffY# / objectMoveTime ; Ausgabe DebugLog "Differenzen: "+objectDiffX#+"|"+objectDiffY#+" in "+objectMoveTime DebugLog "Bewege "+objectMoveX#+"|"+objectMoveY# ; Bewegen If objectDiffX# <> 0 Then object_posX# = object_posX# + objectMoveX# EndIf If objectDiffY# <> 0 Then object_posY# = object_posY# + objectMoveY# EndIf EndIf ; Zeiten zurücksetzten If object_moveTime-MilliSecs() <= 0 And object_moveTime <> 0 Then object_moveTime = 0 EndIf So, die Ausgabe sieht ddann in etwa so aus... Zitat: Position: 10.0|4.0
Differenzen: 0.0|-1.0 in 93 Bewege -0.0107527 Differenzen: 0.0|-0.989247 in 66 Bewege -0.0149886 Differenzen: 0.0|-0.974259 in 33 Bewege -0.029523 Differenzen: 0.0|-0.944736 in 1 Bewege -0.944736 Zeit zurückgesetzt Das stimmt dann zwar im Endeffekt einigermaßen, aber die Geschwindigkeit ist alles andere als Konstant. ![]() Wüsste da jemand eine bessere Möglichkeit, das ganze zu lösen ? |
||
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Position: 10.0|4.0
Differenzen: 0.0|-1.0 in 93 Bewege -0.0107527 Differenzen: 0.0|-0.989247 in 66 Bewege -0.0149886 Differenzen: 0.0|-0.974259 in 33 Bewege -0.029523 Differenzen: 0.0|-0.944736 in 1 Bewege -0.944736 Zeit zurückgesetzt Du solltest die Differenz nicht nur durch die Soll-Zeit teilen, sondern auch noch mit der Ist-Zeit multiplizieren. Verstehst du was ich meine? Du berechnest die Geschwindigkeit in Pixel/Millisekunde, wendest sie aber nur einmal an, also, als ob es Pixel/Frame wäre. Du musst also die Geschwindigkeit noch mit Millisekunden/Frame multiplizieren. mfG Edit Ausserdem brauchst du die Geschwindigkeit ja nur einmal auszurechnen, da sie ja konstant bleiben soll =) |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Düsi |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dankeschön ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group