schnellster weg von A nach B

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

schnellster weg von A nach B

Beitrag von Elayn »

hallo,
wie kann man ein sprite so bewegen, dass es immer den kürzesten weg zu zwei anderen koordinate nimmt (ich mein das es sich sichtbar dorthin bewegt)?
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Der schnellste Weg ist immer Luftlinie. Gibt es Hindernisse denen das Sprite ausweichen muss, muss man eventuell Wegfindungs - Algos einsetzen?
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Luftlinie:

du nimmst die Differenz zu den Zielkoordinaten, und teilst das durch die Anzahl Frames die du brauchen willst.
diese quotienten speicherst du in zwei variablen, zum beispiel SpeedX und SpeedY.
verwende für sowas dann lieber Floats bzw. rechne mit tausendstel pixel.

jetzt kannst du in jedem Frame zu den aktuellen Sprite-Koordinaten deine SpeedX und SpeedY dazuaddieren und dann das Sprite wieder darstellen.

ich kann dir später mal ein billiges Beispiel hacken, jetzt muss ich erstmal Fisch braten....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
cxAlex
Beiträge: 2111
Registriert: 26.06.2008 10:42

Beitrag von cxAlex »

Mit dem Macro kannst du die den Weg zwischen 2 Punkten ausrechnen, vlt. kannst du das ja brauchen:

Code: Alles auswählen

Macro Way(x1, y1, x2, y2)
  Sqr((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))
EndMacro

Debug Way(3, 4, 6, 7)
Projekte: IO.pbi, vcpu
Pausierte Projekte: Easy Network Manager, µC Emulator
Aufgegebene Projekte: ECluster

Bild

PB 5.1 x64/x86; OS: Win7 x64/Ubuntu 10.x x86
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

Beitrag von Elayn »

Danke erstmal!

nein, das sprite muss keinen hindernissen ausweichen.
und gibt es einen weg daraus auch einen winkel zu ziehen, um ein sprite3d in flugrichtung zu drehen?
Zuletzt geändert von Elayn am 28.03.2009 14:26, insgesamt 1-mal geändert.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

geometrie Sek I:

tan(a) = gegenkathete/ankathete = y/x
a = atan(y/x)
pb 4.51
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Beitrag von KeyKon »

Ich bezweifle stark das der Normale ATan() immer den richtigen Winkel zurückgibt, du musst auch noch den Sektor berücksichtigen...

EDIT:

müsste so gehen:

Code: Alles auswählen

Procedure.d ATan2(y.d,x.d)
  If x < 0
    ProcedureReturn ATan(y/x)+#PI
  ElseIf x > 0 And y >= 0
    ProcedureReturn ATan(y/x)
  ElseIf x > 0 And y < 0
    ProcedureReturn ATan(y/x)+2*#PI
  ElseIf x = 0 And y > 0
    ProcedureReturn #PI/2
  ElseIf x = 0 And y < 0
    ProcedureReturn 3*#PI/2
  Else ; x = 0 and y = 0
    ProcedureReturn 0
  EndIf
EndProcedure


winkel1 = ATan2(y2-y1,x2-x1)
(\/) (°,,,°) (\/)
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

Beitrag von Elayn »

das funzt bei mir nicht!
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Und der Preis für die Ungenaueste Fehlermeldung der Woche geht an Elayn!



lass mich mal raten... du hast einfach den dort berechneten Winkel an RotateSprite3D übergeben...
nun... diese Proc arbeitet mit Winkelfunktionen, die bemessen einen Winkel im Bogenmaß.
RotateSprite3D hingegen erwartet einen Winkel der in Grad bemessen ist, also muss man wohl umrechnen.

und auch wenn ich jetzt richtig geraten habe - mach dir nächstes mal gefälligst die Mühe, halbwegs ausführlich zu beschreiben WAS nicht funktioniert und WIE.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Elayn
Beiträge: 14
Registriert: 15.02.2009 17:34

Beitrag von Elayn »

richtig geraten
tut mir leid :oops:
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Antworten