'Geschosse' direkt in Richtung Sprite?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

'Geschosse' direkt in Richtung Sprite?

Beitrag 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
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Rubiko
Beiträge: 943
Registriert: 25.02.2005 19:43
Computerausstattung: Intel i7 2600k
8GB Ram
GeForce GTX 560 Ti
Wohnort: Schwabach

Beitrag 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
Ich wollte die Welt verändern, doch Gott gab mir nicht den Quelltext.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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:
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Re: 'Geschosse' direkt in Richtung Sprite?

Beitrag 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.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag 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 ;-)
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
PureLust
Beiträge: 1145
Registriert: 21.07.2005 00:02
Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
Wohnort: am schönen Niederrhein

Beitrag 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:
Zuletzt geändert von PureLust am 10.08.2007 07:18, insgesamt 1-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Benutzeravatar
inti
Beiträge: 90
Registriert: 01.02.2006 17:25

Beitrag 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.
Antworten