Seite 1 von 2

'Geschosse' direkt in Richtung Sprite?

Verfasst: 10.08.2007 00:37
von Rubiko
Hi,
eigentlich ist es eine recht kurze und (ich denke einfache) Frage, für mich aber etwas schwer...

Nämlich: Wie berechne ich die Flugbahn von Geschossen (2D) die sich direkt auf andere Objekte zubewegen sollen?
D.h. egal wo sich das andere Sprite befindet, mein Geschoss/Pfeil soll sich immer mit der kürzesten Strecke drauf zubewegen.

Ich bin mir sicher dafür braucht man die Sin/Cos/Tan Funktionen (was weiß ich :D) aber da ich zu doof für den Wikipedia Artikel bin und wir darüber noch nicht gesprochen haben in der Schule, hab ich herzlich wenig Ahnung...

Würde mich auf eine Antwort freuen,
Rubiko

Verfasst: 10.08.2007 00:55
von STARGÅTE
hatten wir zwar schon mehrmals aber egal:

Code: Alles auswählen

#b = 0.01745329
Procedure.f Winkel(x.f,y.f)
 Winkel.f
 If x = 0
  If y <  0 : Winkel = -90 : EndIf 
  If y >= 0 : Winkel =  90 : EndIf 
 Else 
  Winkel = ATan(y/x)/#b 
  If x < 0 : Winkel + 180 : EndIf 
 EndIf 
 ProcedureReturn Winkel
EndProcedure

Flugwinkel = Winkel(xZiel-xStart,yZiel-yStart)

; Der Winkelbereich ist dann hier von -90 bis 270

; Die Bewegung des Pfeiles ist dann so:

Geschwindigkeit = 5
xPfeil + cos(Flugwinkel*#b)*Geschwindigkeit
yPfeil + sin(Flugwinkel*#b)*Geschwindigkeit
Hier noch ein lustiges Beispiel

Verfasst: 10.08.2007 01:23
von Rubiko
Mhm.. ja gut hatte jetzt nicht direkt gewusst, nach was ich suchen sollte, sorry! :roll:

Vielen Dank für die Hilfe :wink:
Rubiko

Verfasst: 10.08.2007 02:05
von STARGÅTE
nimms nicht persönlich, sollte auch nicht so gemeint sein, aber ich habe dieses CodeStückchen schon über 10 mal gepostet ^^, mich freuts ja ^^ so bekomme ich meghr Beiträge :-P

Verfasst: 10.08.2007 03:14
von PMV
STARGÅTE hat geschrieben:^^, mich freuts ja ^^ so bekomme ich meghr Beiträge :-P
:coderselixir:

Wenn du jetzt wenigstens geschrieben hättest, du machst es um zu
helfen, aber so /:->
Jaja, hat schon seine Gründe, warum die Postanzahl nicht mehr direkt
angezeigt wird :|

ByTheWay ... der Smily-Code für den Kaffee-Smily is ja genial ... is mir
nie aufgefallen :lol:

MFG PMV

Verfasst: 10.08.2007 06:01
von STARGÅTE
jaja PMV, dich habe ich auch bald, nur noch 2 Plätze, muhaha >:)

spaß bei seite, KLAR mach ich das nur um anderen zu helfen, sonst könnte ich ja auch dummes Zeug in der Laberecke posten :wink:

Re: 'Geschosse' direkt in Richtung Sprite?

Verfasst: 10.08.2007 06:33
von PureLust
Rubiko hat geschrieben:Nämlich: Wie berechne ich die Flugbahn von Geschossen (2D) die sich direkt auf andere Objekte zubewegen sollen?
D.h. egal wo sich das andere Sprite befindet, mein Geschoss/Pfeil soll sich immer mit der kürzesten Strecke drauf zubewegen.
Winkelfunktionen wie Sin/Cos werden für sowas triviales garnicht benötigt.
Hier mal eine Variante komplett ohne Winkelfunktion die vermutlich auch etwas schneller sein dürfte als eine Variante mit Winkelfunktionen:
(Und selbst diese könnte man noch optimieren, aber ich wollte Dich nicht druch unnötige Variablen verwirren.)

Code: Alles auswählen

Speed = 5
Distance.f = Sqr((xZiel-xPos) * (xZiel-xPos) + (yZiel-yPos) * (yZiel-yPos))
xStep.f = (xZiel-xPos) / Distance * Speed
yStep.f = (yZiel-yPos) / Distance * Speed

; Bewegung des Schusses:

xShot.f + xStep
yShot.f + yStep
Gruß, PL.

Verfasst: 10.08.2007 06:54
von STARGÅTE
ja ist zwar schneller, dafür muss er bei deiner Variante aber wieder die Winkel für das Sprite für den Pfeil ausrechnen, und hat damit wieder meine Procedure drin, nur das x und y dann deine Step Werte sind ;-)

Verfasst: 10.08.2007 07:14
von PureLust
STARGÅTE hat geschrieben:ja ist zwar schneller, dafür muss er bei deiner Variante aber wieder die Winkel für das Sprite für den Pfeil ausrechnen, ...
Jo, ... für die reine Flugbahn (wonach er ja gefragt hatte) reicht die simplere Methode von mir.
Wenn er natürlich noch das Sprite entsprechend ausrichten (drehen) will benötigt er natürlich noch den Winkel, da hast Du recht. :allright:

Aber auch wenn er dann komplett auf Deine Methode geht, sollte er am besten die ständig gleich bleibende Berechnung (cos(Flugwinkel*#b)*Geschwindigkeit und sin(Flugwinkel*#b)*Geschwindigkeit) besser einmalig vorberechnen. :wink:

Verfasst: 10.08.2007 07:16
von inti
ich denke beides hat seine daseinsberechtigung! /:->

PureLust's variante eigent sich am besten für direkte schüssen und die durchgeführte addition ist wohl das schnellste wo gibt - STARGÅTE's variante ist etwas umfangreicher aber bietet mehr freiheiten wie zb das neuausreichen nach dem ziel (stichwort: lenkraketen) oder geschwindigkeitsänderungen und dadurch anspruchsvollere schuss-pattern.