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

Meai

Frischling

  • »Meai« ist der Autor dieses Themas
  • Private Nachricht senden

1

17.02.2009, 19:58

2D Bewegung kann doch nicht so schwer sein..

Hallo Leute, die Frage ist mir eigentlich relativ peinlich, aber ich bekomm einfach keine konstant schnelle Bewegung im zweidimensionalen Raum zustande.
Mein Sprite (mit xPos, yPos) soll sich in zufällige Richtungen gleich schnell bewegen. Jetzt hab ich das Problem, dass die Geschwindigkeit natürlich abnimmt wenn die Distanz zum neuen, zufälligen Wegpunkt geringer ist als die vorherige. Hat wer eine Idee, oder "best practice" in diesem Fall?
Gibt es gar eine komplett andere Möglichkeit Sprites auf einen definierten Punkt hinzubewegen?
Das ist mein Code, funktioniert alles bis auf die unterschiedliche Geschwindigkeit:
timePassed = Sekunden pro Frame

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
distanceToMove = D3DXVECTOR2 (distance.x * timePassed / 10, distance.y * timePassed / 10);
        
        this->xPos+=distanceToMove.x;
        this->yPos+=distanceToMove.y;
        /*if wayPoint reached, do what? exactly: create another wayPoint*/
        if ( abs(wayPoint.x - xPos) < 5)
        {

             wayPoint = D3DXVECTOR2(rand()%400,rand()%400); 
             distance = D3DXVECTOR2(wayPoint.x - xPos, wayPoint.y - yPos);
        }

2

17.02.2009, 20:11

Re: 2D Bewegung kann doch nicht so schwer sein..

Zitat von »"Meai"«

Jetzt hab ich das Problem, dass die Geschwindigkeit natürlich abnimmt wenn die Distanz zum neuen, zufälligen Wegpunkt geringer ist als die vorherige. Hat wer eine Idee, oder "best practice" in diesem Fall?

Hm, hä?

Naja, also wenn du willst, dass dein Objekt am Ende genau am Zielpunkt ist, bewegst du es eigentlich ganz normal und konstant in dessen Richtung. Vor jedem Schritt kannst du dann noch prüfen, ob der Abstand zum Zielgeringer ist als der Betrag des nächsten Schrittes.Wenn ja, setzt du das Objekt direkt auf den Zielpunkt.
Den Betrag kannst du recht leicht per Pythagoras berechnen.
Lieber dumm fragen, als dumm bleiben!

the[V]oid

Alter Hase

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

3

17.02.2009, 20:12

Re: 2D Bewegung kann doch nicht so schwer sein..

Verwende halt einfach einen Bewegungsvektor, der vom Betrag her konstant ist und nur seine Richtung ändert.
<< an dieser Stelle ist eine Signatur verstorben >>

4

17.02.2009, 20:26

Wenn ich mich nicht täusche nimmst du zur bewegung den Vector AB (A momentaner Punkt, B Zielpunkt) als bewegungsvektor * der Zeit. Das hat zur folge dass bei längeren Distanzen der Vektor selbstverständlich größer ist und sich deshalb schneller bewegt.

Deshalb musst du erst den Vektor durch dessen Länge dividieren damit du einen Einheitsvektor bekommst. Diesen Vektor benutzt du dann als richtung in der das Sprite sich bewegen soll.

Wahrscheinlich wird dir die Geschwindigkeit dann aber gesamt zu klein sein da er sich dann pro Sekunde nur um eine Einheit fortbewegt.. das ganze kann ganz einfach gelöst werden indem du den Vektor dann mit der Geschwindigkeit x multiplizierst =)

Korigiert mich bitte falls ich blödsinn erzähle..

Meai

Frischling

  • »Meai« ist der Autor dieses Themas
  • Private Nachricht senden

5

17.02.2009, 21:32

Danke Bertel, das wars was ich gesucht habe :D
(eigentlich verdammt erschreckend wie oft ich bereits Vektoren in diversesten Schulen/Vorlesungen durchgenommen hab und sie trotzdem nicht praktisch anwenden kann...)

Werbeanzeige