Fliegende Kugel berechnen



  • Hallo,

    ich möchte so eine Art Shooter aus der Vogelperspektive machen. Dazu hab ich einen Spieler (P1(x1|y1)) und die Maus (P2(x2|y2)). Wenn ich jetzt klicke möchte ich das der Spieler eine Kugel (Punkt 3) in die Richtung von P2 also Maus "schießt". dazu brauchte ich ja eine Formel oder Berechnung, die ich dann hoch zähle damit ich die Kugel bewege und bei wert "zu_weit" lösche.
    Ich hab es schon mit y=mx+b versucht aber so fliegt die Kugel schneller wenn ich nach oben oder unten ziele, durch m.
    Kann mir jemand eine Berechnung zeigen mit dem ich das machen kann?

    Wenn ich mit meiner Beschreibung etwas ungenau war hab ich hier noch mal ne Zeichnung zum Problem:

    http://img11.imageshack.us/img11/6910/bloggysteigung.png



  • Zerod schrieb:

    y=mx+b

    wird nicht gehen, wenn du z.B. direkt nach oben oder unten schießt. Außerdem machst du die Kugel abhängig von der X-Achse und nicht von der Zeit.

    x = p1x + vx;
    y = p1y + vy;
    

    p ist der Startpunkt und v ist der Vektor. Wen du schon genau weißt wie viel später die Kugel das Ziel erreichen soll, ist vx = (p1x - p2x) / t .

    Außerdem ist das eher Verktorrechnung also Mathematik.



  • Den Richtungsvektor ("Verschiebungsvektor") ergibt sich einfach mit ein paar trigonometrischen Gegebenheiten:

    x(α)=vcos(α)x(\alpha) = v \cdot cos(\alpha)

    y(α)=vsin(α)y(\alpha) = v \cdot sin(\alpha)

    Diesen Vektor addierst du einfach auf den momentanen Positionsvektor deiner Kugel.
    Dabei ist v natürlich ein Skalar, die Geschwindigkeit mit der du die Kugel verschieben willst.

    Der Winkel zwischen der X-Z-Ebene und der Verbindungslinie Kugelmittelpunkt-Maus ergibt sich einfach durch

    α=asin((maus_xkugel_Mx)2+(maus_ykugel_My)2maus_ykugel_My)\alpha = asin( \frac{\sqrt{ (maus\_x - kugel\_Mx)^2 + (maus\_y - kugel\_My)^2 }}{maus\_y - kugel\_My})

    Wobei das oberhalb des Bruchstriches in der asin()-Funktion einfach nur die Länge des Vektors Maus-Kugelmitte ist.

    p.s.: Es ist 3:40 Nachts und ich bin ein wenig müde, ich war zudem zu faul in irgendnem Projekt von mir nachzusehen ob ich das denn auch wirklich so verwende und hab mir das schnell neu ausgedacht. Sind also mathematische Fehler enthalten und/oder bin ich total am Thema vorbeigerast, dann bitte ich um Entschuldigung 🙂


Anmelden zum Antworten