Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.07.2011, 12:45

Richtung Cursor Schießen

Halli Hallo,

derweil bin ich an einem kleinen Spaceshooter dran(2D).

In Moment kann sich mein Schiff zur Blickrichtung des Cursors rotieren und sich natürlich auch bewegen,
aber unabhängig davon, wo gerade mein Cursor hinzeigt.

Soweit so gut...

Jetzt möchte ich aber zum Cursor meine Projektile abfeuern, welche aber über den Cursor hinausfliegen und erst
wenn sie aus dem Sichtbereich fliegen "zerstört" werden sollen.

Die Rotation für das Sprite des Geschosses ist die selbe des Spaceships, das ist klar.
Nur wie kriege ich jetzt raus, um welchen X-Wert bzw Y-Wert ich mein Sprite pro Durchlauf
der Hauptschleife bewegen muss, damit es sich genau in die Richtung bewegt die ich haben möchte und
mit der angegebenen Geschwindigkeit.

Wie mache ich das mit Vektoren?..

Alles was ich bisher gefunden habe oder herausgefunden bringt mich nicht weiter oder ich check es einfach nicht xD... Hab bisher noch nie mit Vektoren gearbeitet oder gibt es noch andere Möglichkeiten dies auszurechnen?..
Ob sich jemand hier die Mühe macht es mir zu erklären, wäre euch ziemlich dankbar :)..


Viele Grüße,
Tschu.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

2

07.07.2011, 13:46

Bewegungsvektor = Cursorposition - Position des Schiffs oder der Waffenbucht
Richtungsvektor = Bewegungsvektor/Länge
Die länge des Bewegungsvektors berechnest du mit dem Satz des Pythagoras.

Neue Position = Startposition+Richtungsvektor *Geschwindigkeit*Zeit seit Abschuss
oder iterativ:
Neue Position = alte Position+Richtungsvektor *Geschwindigkeit*Frametime

nehm das nächste mal bitte eine kleinere Schrift.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

3

07.07.2011, 13:49

Hallo Tschu,

du hast ja die Koordinaten des Cursors und die Koordinaten von deinem Raumschiff. Diese Koordinaten kann man auch einfach als so genannte Ortsvektoren interpretieren. Also bildlich gesprochen: Zwei Pfeile, die vom Koordinatenursprung zu den Orten zeigen, an denen sich der Cursor bzw. das Raumschiff befinden. Hast du diese beiden (Orts-)Vektoren gegeben, so kannst du den Vektor berechnen, der diese beiden Vektoren miteinander verbindet. Das ist dann genau der Vektor der die von dir gewollte Schussrichtung angibt. Um den zu berechnen subtrahierst du lediglich den (Orts-)Vektor des Cursors vom (Orts-)Vektor des Raumschiffs. Dies tust du indem du die x-Komponenten der beiden Vektoren subtrahierst und gleiches auch für die y-Komponenten machst.

Beispiel:
Der Cursor ist an der Position (100|100), das Raumschiff an der Position (150|120).
Dann ist der Vektor, der die Schussrichtung angibt (100-150|100-120) also (-50|-20).

Allerdings solltest du beachten, dass die Länge dieses Vektors jetzt je nach Entfernung Cursor zu Raumschiff variiert. Also solltest du ihn noch auf die Länge 1 bringen. Dafür teilst du den Vektor durch seine Länge. Die Länge berechnet sich nach Pythagoras.


*EDIT*: Und NachoMan war schneller...

Gruß
SaRu_

Werbeanzeige