Einheiten von Punkt wegbewegen lassen (oder so ^^)



  • Hi,

    ich will ein Spiel programmieren, in dem folgendes passieren soll (u.a.^^):
    Man hat viele Einheiten irgendwo auf dem Spielfeld rumstehen, und wenn man wo hin klickt, bewegen sie sich vom Punkt des Klickens weg. Dabei sollen sich aber nicht alle gleich viel bewegen, sondern je näher sie am Mausklick dran sind, desto weiter bewegen sie sich auch.

    Wie kann ich ihre Flugbahn berechnen?

    mfg
    Jakel



  • Wie kommst du nun von dem einen auf das andere? 🙂

    Naja, du könntest dir eine Funktion basteln, die dir die Energie angibt, mit welcher sich die Einheiten im Abstand x des Punktes wegbewegen (zB ein linearer Verlauf, der radial vom Mausklick wegführt). Diese Energie kannst du dann als Ausgangsenergie für einen schiefen Wurf benutzen und so eine Flugbahn berechnen.

    Im allgemeinen würde ich dir aber den Tipp geben deine Fragen besser zu formulieren 🙄.



  • Hm ja Flugbahn war wohl nich die richtige bezeichnung ^^
    Es geht hier nicht um Schwerkraft oder so, das Spiel ist aus der Vogelperpektive.

    Was ich machen will is halt die Entfernung vom Mausklick berechnen und irgednwie für x und y jeweils einen Wert erhalten, der angibt, wie weit die Einheiten sich bewegen müssen.



  • Was meinst du mit x,y? Im 3D? Im Screenspace?
    Wenn du antworten erwartest, solltest du dir vllt auch mal ein paar Minuten Zeit lassen deine Fragen VERSTÄNDLICH zu formulieren.

    Ansonsten versteh ich das Problem nicht ganz. Du hast beim Klick eine Cursorposition (da du nicht mal erwähnst ob das alles im 3D ist gehe ich mal davon aus, dass das bereits 2D Koordinaten sind) und kennst die Position deiner Einheiten. Du errechnest dir einfach die Distanz und basierend auf der errechnest du dir wie weit sie gehen sollen (mittels irgend einer "Scale" Funktion).



  • Die Entfernung kannst du mit hilfe einer einfachen Formel ausrechnen.
    Formel

    zudem kannst du auch noch mit der Mausposition und der Object Position einen Vektor bilden, der in die "weg von der Maus" Richtung zeigt.
    Die Energie mit der sich die Objecte von der Mausposition wegbewegen musst du nach deinen Vorstellungen berechnen.
    z.b. Linear 1/abstand = energie oder so ähnlich...

    MFG



  • Wie wärs denn, wenn du die Koordinaten in Vectoren speicherst?

    #include <vector2d.h>
    
    //darin speicherst du dann deine Koordinaten der maus und des Objekts.
    vector2df mausPos //mausPos.X = X, mausPos.Y = Y
    vector2df objPos //objPos.X = X, objPos.Y = y
    
    //jetzt kannst du ganz einfach mit einer Funktion die Distanze bestimmen
    float distanze;
    
    distanze = objPos.getDistanzeFrom(mausPos);
    
    //Dann speichert er in distanze die Entfernung der Punkte (z.B. 0.133245)
    //dann kannst du jetzt damit weiter arbeiten z.B. so:
    
    //Wenn das Objekt nah an der Maus ist
    if(distanze < 0.1)
    {
        speed = 0.5;
    }
    //Wenn das Objekt weiter weg ist
    else if(distanze > 0.1)
    {
        speed = 0.1;
    }
    

Anmelden zum Antworten