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

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

1

15.08.2013, 03:28

Richtungsvektor umkehren (SFML 2.1)

Hey Leute,
Ich hab da ein kleines Problem - undzwar geht es darum die Richtung bzw. den Richtungsvektor
umzukehren das er praktisch in die entgegegesetzte Richtung zeigt.

Ich überprüfe in einer Schleife ob eine Kollision zwischen Spieler und Objekt stattfindet,
wenn ja soll das Objekt angestoßen werden und sich in die Richtung
des Richtungsvektors des Spielers bewegen(Das ist nicht das Problem)
und der Spieler soll von diesem Objekt "abprallen" d.h. in die entgegengesetzte Richtung bewegen.
Dachte ich kann einfach ein Minus vorsetzen und gut ist, dem ist nicht so^^

Hoffe jemand kann helfen und Danke im voraus :) ,
MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

2

15.08.2013, 05:05

Hol dir den Winkel, in dem er aufprallt und multipliziere den mit -1.
Den alten Ortsvektor multiplizierst du dann einfach mit der Rotationsmatrix von deinem Winkel.

(Link)
=deinWinkel

(Link)
Quelle: Klick
Schon sollte das Teil in die andere Richtung fliegen.
Je nach Architektur und Wunsch reicht auch ein Invertieren eines der beiden oder einen der dreien Werte im Vektor. Stößt man also bspw. gegen eine "X"-Wand wird der x-Wert invertiert. Stößt man gegen eine "Y"-Wand hingegen der y-Wert. Z erübrigt sich. Habe ich so bei Pong gemacht.

MfG
Check

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

3

15.08.2013, 06:46

Statt den Winkel mit -1 zu multiplizieren, reicht es auch den Vektor mit -1 zu multiplizieren. Das ergibt exakt die Gegenrichtung und bedarf keiner Matrix-Operation oder Winkel-Berechnung.
Wenn die -1 bei Dir als Faktor nicht tut, dann ist eher etwas anderes im Argen (z.B. die Länge des von Dir verwendeten Vectors), denn die Gegenrichtung des Vectors (x/y) ist immer (-x/-y).
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

15.08.2013, 08:02

Den Winkel mit -1 zu multiplizieren ist nicht nur unnötig kompliziert, sondern auch schlichtweg falsch.
Was würde mit einem Winkel von 0° passieren? Der bliebe 0°. Wenn man schon über Winkel geht, dann bitte richtig, indem man 180° addiert.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

15.08.2013, 08:05

David: Das stimmt zwar, allerdings hat Check scheinbar auch eher von einer Reflektion an der Flächennormale geredet als über eine 180°-Umkehr. Dennoch stimmt es natürlich nur für ganz spezielle Zwecke oder für den Winkel zur Flächennormalen. Das war hier allerdings nicht gefragt.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

6

15.08.2013, 08:07

Stimmt ...
FreezingEngine weiß scheinbar selbst nicht genau, was er will ;)
Normalenvektor ist auf jeden Fall ein gutes Stichwort, wahrscheinlich braucht er den.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

7

15.08.2013, 08:24

Ich glaube, dass er den tatsächlich nicht will, bei dem, was er tun möchte. Es klang so als will er z.B. beim Aufprall eines Characters in einem JnR dafür sorgen, dass der Char auf dem Boden stehen bleibt statt darin versunken zu sein. Da muss er tatsächlich entgegen der Bewegungsrichtung den Char wieder raus schieben. Wenn er aber eine richtige Reflektion will, dann kommt er um die Normale nicht herum.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

FreezingEngine

Treue Seele

  • »FreezingEngine« ist der Autor dieses Themas

Beiträge: 280

Wohnort: NRW

Beruf: Schüler

  • Private Nachricht senden

8

15.08.2013, 13:48

Also erstmal danke für die Hilfe ^^
Damit man es leichter versteht :
Wir befinden uns im im All und wenn Raumschiff A gegen Raumschiff B fliegt
sollen sie voneinander "abprallen".

Kann auch grade nicht versucheb etwas umzusetzen da ich unterwegs bin :)

MfG Marcel
"He who sacrifices freedom for security deserves neither."
Benjamin Franklin

9

15.08.2013, 14:27

..also hast du das mit sowas wie nem exzentrischen Stoß zu tun (deine Raumschiffe sind wohl nicht Kugelförmig). Da bist du glaub ich an dem Punkt, wo eine Physikengine keine schlechte Wahl ist.

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

15.08.2013, 14:31

Dann ist ein Umkehren oder Invertieren des richtungsvektors auch nur dann gewünscht, wenn das eine Objekt das andere senkrecht trifft, da sonst über den Einfallswinkel der neue Richtungsvektor berechnet werden muss.
Je nachdem, mit welchen geometrischen Formen dabei alles gearbeitet werden soll, könnte es doch evtl. besser sein, eine Physik-Engine dafür zu verwenden. Dies würde den Vorteil mit sich bringen, dass dadurch sehr viele Dinge abgedeckt sind, die später noch nützlich werden könnten (beliebige Formen für die Objekte, statische Objekte, diverse Joints (bspw. in Box2D) etc.) und dass sich der Aufwand reduziert (ich gehe dabei davon aus, dass das Einbinden einer Physik-Engine einfacher sein dürfte, als das Schreiben einer solchen).
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige