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

04.06.2012, 11:29

Bewegung von Objekten

Hallo miteinander

Ich habe schon lange nach diesem Thema gesucht, doch ich komme einfach nicht auf die Lösung. Es geht um Bewegung von Objekten.
Mein Ziel ist es, dass sich ein Objekt (ein Kreis mit x und y Koordinaten -> 2D) meinen Mauszeiger verfolgen soll.

Mein erster Versuch war es einfach einfach die x oder y Koordinaten so lange zu erhöhen oder reduzieren bis ich die Position des Mauszeigers hab.
Eigentlich funktioniert diese Lösung auch, aber sie ist ziemlich hässlich. Was fehlt mir noch damit ich eine geschmeidige Bewegung zum Mauszeiger habe?

Durch meine Recherchen weiss ich, dass ich Vektoren benutzen sollte. Doch ein Vektor beschreibt nur eine Richtung, oder?

Müsste ich jedesmal den Vektor ausrechnen und mithilfe diesem dann die neue x und y Position ausrechnen?

Ich hoffe Ihr könnt mir helfen:)

2

04.06.2012, 11:34

Mein erster Versuch war es einfach einfach die x oder y Koordinaten so lange zu erhöhen oder reduzieren bis ich die Position des Mauszeigers hab.
Du kannst doch dem Kreis eine konstante Geschwindigkeit geben und dann die Position mit der vergangenen Zeit mit verrechnen.

3

04.06.2012, 11:38

Mein erster Versuch war es einfach einfach die x oder y Koordinaten so lange zu erhöhen oder reduzieren bis ich die Position des Mauszeigers hab.
Du kannst doch dem Kreis eine konstante Geschwindigkeit geben und dann die Position mit der vergangenen Zeit mit verrechnen.
Könntest du das vielleicht näher beschreiben? Wenn mein Punkt den Mauszeiger erreicht müsste doch der Punkt dann die Geschwindigkeit 0 haben.
Was meinst du mit deiner Multiplikation? Die Position des Kreises mit der vergangenen Zeit multiplizieren? Was ist die vergangene Zeit? Seit dem letzten Frame?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

4

04.06.2012, 12:44

Ich würde es so machen:

NewObjectPos = ObjectPos + Normalize(CursorPos - ObjectPos) * MovementSpeed * FrameTime
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]

5

04.06.2012, 15:12

Könntest du das vielleicht näher beschreiben? Wenn mein Punkt den Mauszeiger erreicht müsste doch der Punkt dann die Geschwindigkeit 0 haben.
Was meinst du mit deiner Multiplikation? Die Position des Kreises mit der vergangenen Zeit multiplizieren? Was ist die vergangene Zeit? Seit dem letzten Frame?
Wenn die Geschwindigkeit 0 ist, dann muss der Kreis sich nicht bewegen und den Rest hast du ja selbst schon beantwortet.

@BlueCobold: Was bringt Normalisieren?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

04.06.2012, 15:15

@BlueCobold: Was bringt Normalisieren?


Um die Bewegung unabhängig von der Distanz von Objekt zu Mauszeiger zu machen?
@D13_Dreinig

7

04.06.2012, 15:46

Ahhh....danke :)

8

04.06.2012, 16:35

Ich würde es so machen:

NewObjectPos = ObjectPos + Normalize(CursorPos - ObjectPos) * MovementSpeed * FrameTime

Was heisst normalisieren?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

9

04.06.2012, 16:50

Mein erster Versuch war es einfach einfach die x oder y Koordinaten so lange zu erhöhen oder reduzieren bis ich die Position des Mauszeigers hab.
Eigentlich funktioniert diese Lösung auch, aber sie ist ziemlich hässlich. Was fehlt mir noch damit ich eine geschmeidige Bewegung zum Mauszeiger habe?

NewObjectPos = ObjectPos + Normalize(CursorPos - ObjectPos) * MovementSpeed * FrameTime


wenn ich das richtig verstanden habe, dann hat er bereits etwas, was dieser Lösung im Groben entspricht (nur dass die Geschwindigkeit nicht so gut angepasst werden kann)
ich denke mal, dass er nicht einfach nur eine geradlinige Bewegung mit gleichmäßiger Geschwindigkeit zur aktuellen Position des Mauszeigers haben will, sondern etwas ein wenig hübscheres

man könnte beispielsweise die Geschwindigkeit in Abhängigkeit zur aktuellen Entfernung zum Mauszeiger setzen, so dass der Kreis sich bei einem höheren Abstand zum Mauszeiger sich schneller auf diesen zu bewegt
der Kreis könnte sich auch mit einer variierenden Geschwindigkeit auf den Mauszeiger bewegen (mit konstanter Beschleunigung in Richtung des Mauszeigers
oder man lässt den Kreis genau den Weg der Maus mit einer gewissen Verzögerung nachfahren
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

10

04.06.2012, 17:33

wenn ich das richtig verstanden habe, dann hat er bereits etwas, was dieser Lösung im Groben entspricht (nur dass die Geschwindigkeit nicht so gut angepasst werden kann)
ich denke mal, dass er nicht einfach nur eine geradlinige Bewegung mit gleichmäßiger Geschwindigkeit zur aktuellen Position des Mauszeigers haben will, sondern etwas ein wenig hübscheres

man könnte beispielsweise die Geschwindigkeit in Abhängigkeit zur aktuellen Entfernung zum Mauszeiger setzen, so dass der Kreis sich bei einem höheren Abstand zum Mauszeiger sich schneller auf diesen zu bewegt
der Kreis könnte sich auch mit einer variierenden Geschwindigkeit auf den Mauszeiger bewegen (mit konstanter Beschleunigung in Richtung des Mauszeigers
oder man lässt den Kreis genau den Weg der Maus mit einer gewissen Verzögerung nachfahren


Die Bewegungsgeschwindigkeit kann über den Faktor 'MovementSpeed' gesteuert werden.

@timi19: http://de.wikipedia.org/wiki/Einheitsvektor
@D13_Dreinig

Werbeanzeige