Bewegung von einem Punkt zum anderen



  • Hallo,
    die Frage ,die ich hier Stelle mag für einige vlt blöd erscheinen aber wie bekommt man das hin, dass ein Objekt sich zu einem Punkt in der Spielwelt bewegt (2 Dimensionen)

    Ich habe versucht das mit linearen funktionen zu realisieren a la:

    pos.y = pos.x * steigung + achsenabschnitt;
    

    das Problem ist aber, dass je steiler die gerade zwischen 2 Punkten ist, desto schneller bewegt sich auch das objekt. Dabei sollten sich die objekte im idealfall mit konstanter geschwindigkeit bewegen. Weiß jemand wie das geht?

    vielen dank im voraus



  • Schau dir mal Vektoren an: p += d * dt
    Wobei p die momentane Position, d der Richtungsvektor zum Ziel und dt der Zeitschritt sind...



  • danke, das hat das problem mit der geschwindigkeit gelöst allerdings bewegt sich das objekt leicht "komisch". Es bewegt sich zuerst auf die gleiche x/y ebene wie der andere Punkt und geht dann senkrecht/waagerecht zum objekt statt den direkten weg zu nehmen.

    hier ist die dafür verantwortliche Stelle im code:

    void Update(Point* p)  // p ist das Ziel
    {
            // Vector2D ist ein typedef von Point
    	Vector2D d( (p->x > pos.x? 1 : -1) , (p->y > pos.y? 1 : -1 ) );
    
    	pos += d*1;  // 1 ist ein dummywert für dt (es wurde noch kein timer implementiert)
    }
    


  • d = pos - p 😉



  • Du meinst nicht zufällig p - pos? 😉

    void Go(Vector2D to, float elapsed_time)
    {
      pos += (to - pos_).normalized() * speed_ * elapsed_time;
    }
    

    PS: Du solltest dir vielleicht eine vernünftige Vektor-Klasse bauen anstatt "Point" zu missbrauchen.



  • Ach, ja natürlich mein ich p - pos 😉



  • hi,
    danke an alle, jetzt funktionierts


Anmelden zum Antworten