GML - Frage zu Sprits und Verfolgen einer bestimmen line

  • GM 8

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • GML - Frage zu Sprits und Verfolgen einer bestimmen line

    Hallo,

    ich hoffe ich kann euch einfach erklären was ich vorhabe und wo das Problem liegt.

    Wie ihr im Bild unten sehen könnt geht es um eine Linie die ein festen Punkt [a] hat und ein punkt der ein Objekt folgen soll.
    [code=c] ist ein Punkt denn ich 1. gerne mehrfach hinzufügen möchte also c1 , c2, c3 ... , Und 2. den ich (zbs.) 10px von b oder a entferne.

    Des weiteren will ich das a,b, und die c mit Sprits belegen kann.

    Also a ist ein Mittelpunkt eines Kreises und b Kreist um a und die c`s sind constant auf der Linie zu a und b

    Könnte mir jemand helfen und mir das Programmieren oder genau sagen wie es geht.

    Wäre wirklich sehr nett...
    Bilder
    • frage.png

      3,64 kB, 342×267, 479 mal angesehen
    Mfg
    LetsPlayTV.de
    aka Patrick
  • Lösung zu 1.:
    Spoiler anzeigen

    Um die C's auf der Linie zu "spawnen", kannste Kosinus und Sinus nehmen.

    GML-Quellcode

    1. dist=random(1); //Zufälliger Abstand nehmen. (Relativ zur aktuellen Distanz des B Objektes.)
    2. xx=x+cos(pi/180*obj_b.dir)*dist*obj_b.dist; //Greift auf eine, in Lösung zu 2 erstellten Variable zu (siehe Lösung zu 2) und setzt damit die x Position fest.
    3. yy=y+sin(pi/180*obj_b.dir)*dist*obj_b.dist; //Siehe oben.
    4. instance_create(xx,yy,obj_c); // Erstellt das Objekt C.



    Lösung zu 2:

    Spoiler anzeigen
    Das könnte man Kosinus und Sinus lösen.

    In dem B Objekt kommt ins create event:

    GML-Quellcode

    1. dir=0; //Der Winkel, indem B zu a steht.
    2. dist=point_distance(x,y,obj_a.x,obj_a.y); //Abstand zum A Objekt.

    Und ins Step Event:

    GML-Quellcode

    1. dir+=1; //Kannst damit rumspielen, jeden Step dreht sich das Objekt um 1°.
    2. dir=dir mod 360 //Somit wird dir nie größer als 360 und kleiner als 0.
    3. x=obj_a.x+cos(pi/180*dir)*dist; //Die X Position liegt auf dem Kreis mit Mittelpunkt obj_a.x und dem Radius dist und zu dir° zu obj_a.
    4. y=obj_a.y+sin(pi/180*dir)*dist; //Das gleiche mit y.


    In dem Objekt C im Create event:

    GML-Quellcode

    1. dist=point_distance(x,y,obj_a.x,obj_a.y); //Abstand zum A Objekt.
    2. dist=dist/obj_b.dist; //Rechnet aus, wie viel Prozent die aktuelle Distanz zur Distanz vom B Objekt ist.

    Ins Step Event:

    GML-Quellcode

    1. x=obj_a.x+cos(pi/180*obj_b.dir)*dist*obj_b.dist; //Das gleiche wie oben, nur dass dist*obj_b.dist gerechnet wird und die Richtung nun obj_b.dir ist.
    2. y=obj_a.y+sin(pi/180*obj_b.dir)*dist*obj_b.dist; //Das gleiche wieder mit y.


    Zum besseren Verständnis hab ich mal ein Beispiel angehängt.
    line-ex.zip

    Ich hoffe, ich konnte helfen!

    -tobi97
    8|
  • Noch einfacher wäre es mit den Funktionen:
    lengthdir_x und lengthdir_y

    So müsstest du einfach in den Objecten B und C im Create Event Variablen für Winkel und Entfernung definieren:

    GML-Quellcode

    1. //Entfernung des Objects in pixeln
    2. dist = 100;
    3. //Richtung
    4. deg = 0;



    und im Step schreiben:

    GML-Quellcode

    1. deg+=1;//Object dreht sich um ein grad weiterif deg >360{deg=1};//Wenn es sich einmal gedreht hat zurücksetzen (Damit es keinen Overflow gibt xDD )x=lengthdir_x(dist,deg)+A.x;y=lengthdir_y(dist,deg)+A.y;


    A ist in Meinem Fall das Object um das gekreist werden soll :)

    Im Prinzip das selbe wie das was Tobi97 geposted hat aber warum unnötig herumrechnen wenn der gm diese funktionen bereits anbietet?

    EDIT: Den zweiten GML code Verschiebt es immer wieder. Warum nur? MIST.
    Ich will wie mein Opa im Schlaf sterben, nicht heulend und schreiend wie sein Beifahrer.





    I am a in the GM Quiz! :heul: :vogel:

    :gmlove:

    xD
  • WOW, erstmal vielen vielen Dank das ihr euch die mühe gemacht habt mir zu helfen und so ein code zu schreiben.
    Besonderen Dank geht an Tobi97 der mir Direkt ein Beispiel gemacht hat.

    Wenn du Fertig bin mit dem was ich vor hab bekommt ihr dafür auch den code.
    Mfg
    LetsPlayTV.de
    aka Patrick