BMAX - Vektorbewegung mit Wackeleffekt bei Endkoordinaten

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Lukio

Betreff: BMAX - Vektorbewegung mit Wackeleffekt bei Endkoordinaten

BeitragSa, Jan 08, 2011 2:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, inzwischen bin ich von Blitz3D auf BlitzMax umgestiegen und finde es sehr viel angenehmer. Im Moment stolpere ich über irgendeine "Falle" beim Benutzen von Vektoren um ein Bild zu bewegen.

Folgendes Problem:

Ich bewege eine Grafik über den Bildschirm, dort wohin ich mit der Maus klicke. Die Bewegung läuft wunderbar glatt ab, dank Sin/Cos Vektorberechnung und Deltatimer. Nur am Endpunkt geschieht etwas seltsames:

Die Grafik fängt an zu "vibrieren" und es entsteht eine Art Spiegelreferenz, jeweils in einem Frame. Um es zu vereinfachen habe ich den Code extrahiert und vereinfacht zusammengeschrieben um den Fehler besser einzugrenzen.

Natürlich hab ich mir die Koordinaten anzeigen lassen und siehe da:

dx, dy (Zielkoordination per Mouseklick) und y (Position) stimmen überein, X "wechselt" ständig.

Ausschnitt aus dem Debuglog für Variable x:
---
DebugLog:119
DebugLog:115
DebugLog:118
DebugLog:114
DebugLog:117
DebugLog:120
DebugLog:116
DebugLog:119
DebugLog:115
DebugLog:118
DebugLog:114
DebugLog:117
DebugLog:120
DebugLog:116
DebugLog:119

Was stimmt da nicht? Ist das ein floating point Problem?

Code für Winkelberechnung / Koordination:

Code: [AUSKLAPPEN]

angle = ATan2(dy - y, dx - x)
y:+speed * Sin(angle) * DeltaTime
x:+speed * Cos(angle) * DeltaTime


Variablentypen:
angle = Float x,y,dx,dy = Int

Was ich bereits versucht habe:

Flip 1
Delay(1)

beides ohne Wirkung

Xeres

Moderator

BeitragSa, Jan 08, 2011 2:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Du schießt am Ende immer übers Ziel hinaus, da die Geschwindigkeit > RestEntfernung ist. Einfach mit einer Bedingung abfangen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Lukio

BeitragSa, Jan 08, 2011 4:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke, natürlich kann ich es so abfangen.
z.B.
Code: [AUSKLAPPEN]

If dy = y AND x <> dx
x = dx
End If


Das funktioniert auch - was ich aber dennoch nicht verstehe, ist die ständige Variation der X Variable, aber nicht bei der anderen Positionsvariable. Diese stimmt immer mit der Zielvariable überein. Wenn ich mit dem Vektor darüber hinausschießen würde, müssten ja beide "shiften" oder nicht ?

Anzeige sieht so am Ende immer so aus:
dx = 120, dy = 273
x = (wechselnd wie im Debuglog) y = 273

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group