Formation drehen

  • GM 8

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

  • Formation drehen

    Hi



    Ich habe folgendes Problem: Ich habe mehrere Einheiten, die man anwählen kann. Die Einheiten sollen am Zielort in Formation gehen. Wie könnte man es machen, dass die formation richtig gedreht ist, also wenn man die Einheiten nach unten/oben schickt die Linie horizontal ist und bei link/rechts die Linie vertikal ist?

    Ich habs nur mit einer diagonalen Linie geschafft.

    formation.zip

    Hab schon die SuFu benutzt, aber nichts in der Art gefunden.
  • ich arbeite gerad an dem problem. sag mir mal wo bei dir die diagonal entsteht

    Nachtrag.
    Ich hab es fast hin bekommen. da man andere codes nicht immer ganz nach vollziehen kann, müstest du jetzt nur wieder dein funktion einsetzten um den abstand des "go_to_here" objektes zu ermittel, wie du es schon für die diagonal gemacht hast.
    Das hab ich hin zu gefügt.
    -Die entgültige richtung läst sich schon vorher mit einem Pfeil am endpunkt definieren:info obj_pfeil var=obj_pfeil.direction
    -Du kannst nun alle einheiten mit einem Rahmen makieren. Denke das ist ganz hilfreich
    -In der Version hab ich dier eine Position eigefügt.
    sie wird im rechten winkel zu Formation ausgeführt. ich glaub nach links. hab ich vergessen.
    Ich habe es so verändert

    GML-Quellcode

    1. nnn.des_ = 1
    2. var xx,yy;
    3. xx=obj_pfeil.x+cos((obj_pfeil.direction+90)*pi/180)*32; //Die *32 sind für den Abstand also in dem Fall 32Pixel
    4. yy=obj_pfeil.y-sin((obj_pfeil.direction+90)*pi/180)*32
    5. nnn = instance_create(xx,yy,obj_go_there)
    6. //nnn = instance_create(mouse_x+(form_pos-global.chos/2)*35-17,mouse_y+(form_pos-global.chos/2)*35-17,obj_go_there)
    7. nnn.g = nnn

    Wie du sieht hab ich wie oben schon erwänt nicht die abstands errechnung nicht mit eigefügt. für plätze die schon bestzt sind.
    weil ich nicht ganz hinter (nnn = instance_create(mouse_x+(form_pos-global.chos/2)*35-17,mouse_y+(form_pos-global.chos/2)*35-17,obj_go_there)) gekommen bin. aber wirst schon schaffen.
    Aber es funktionerit so weit und der grund gedanke ist damit denke ich erfüllt.
    Erklärung

    GML-Quellcode

    1. var xx,yy;
    2. xx=obj_pfeil.x+cos((obj_pfeil.direction+90)*pi/180)*32; //Die *32 sind für den Abstand also in dem Fall 32Pixel
    3. yy=obj_pfeil.y-sin((obj_pfeil.direction+90)*pi/180)*32

    hier mit kannst du einen xy wert bestimmt der sich um einen Punkt orientiert(in zusammen hang der ausrichtung de Mitelpunktes(bsp obj_pfeil.direction)
    der wert 90 ist der rechte winkel und mit "+" oder "-" machst du es nach links oder rechts gedreht.
    Der wert 32 ist der abstand vom mittelpunt(radius)

    Achso und hier meine Version
    formation_01.rar

    Nachtrag 2
    Hier ist noch ein kleiner code schnipsel , der bei mir die collision am endpunkt verhindert.

    GML-Quellcode

    1. if place_meeting(xgoal,ygoal,obj_solid)=true && x!=xprevious && y!=yprevious
    2. {xgoal+=ceil(10-random(12)) ygoal+=ceil(10-random(20))}

    Somit sucht sich jede einheit zufalls orientiert einen punkt in der nähe. evtl ist es hilfreich.
    Meine Signatur hat kein Visum für das GM Forum erhalten.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von x-sascha ()

  • Bei mir geht das nicht. Die Einheiten gehen dann immer nur zum selben Punkt, anstatt eine Linie zu bilden.



    Edit: ich glaube, der Fehler ist, dass cos und sin jeweils nur eine zahl zwischen 0 und 1 ergeben, die dann *32 gerechnet wird. Das ganze +/- obj_pfeil gibt dann etwa die Pfeilposition. Mit cos und sin einfach so kann man ja nicht viel anfangen.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Alron ()

  • Ich sagte doch ich hab nur ein punkt eingefügt. Du must nur selber wieder das gleiche beim erstellen der "go_to_here" objeketes machen wie du es mit deiner Diagonalen gemacht hast.

    Das selber was du hier gemacht hast

    GML-Quellcode

    1. nnn = instance_create(mouse_x+(form_pos-global.chos/2)*35-17,mouse_y+(form_pos-global.chos/2)*35-17,obj_go_there)


    Ich wuste nur nicht was dieser rechnung heist. Ich weis nur es macht.
    Meine Signatur hat kein Visum für das GM Forum erhalten.
  • Der Punkt, der in deinem Code xx ist, ist ca. obj_pfeil.x. Dasselbe für y. Wenn ich meinen code irgendwo einfüge, dann gibt das wieder eine diagonale.



    Weil:

    form_pos gibt an, wann der kreis angewählt worden ist. Der erste, den man angewählt hat, hat form_pos = 1. Der zweite, der angewählt worden ist, hat form_pos = 2. Der dritte form_pos = 3 usw. Davon wird die Hälfte aller angewählten abgezogen. nun ist man schon fast in der Mitte der Diagonalen. Mal 35 ist der Abstand und -17 ist ca. die hälfte von 35, so dass die maus dann ziemlich genau in der mitt der diagonalen ist. Ud weil xx und yy eine zahl zwischen 0 und 1 sind, ist das ergebniss wieder eine Diagonale(in etwa).




    EDIT: Ah, jetzt hab ichs gecheckt. Mir war nich klar, wie wo einfügen und das Zeug mit Kosinus und Sinus.

    Für die verschiedenen Plätze hab ichs jetzt so:

    GML-Quellcode

    1. nnn.des_ = 1
    2. var xx,yy;
    3. xx = obj_pfeil.x+cos((obj_pfeil.direction+90)*pi/180)*(form_pos-global.chos/2)*32; //Die *32 sind für den Abstand also in dem Fall 32Pixel
    4. yy = obj_pfeil.y-sin((obj_pfeil.direction+90)*pi/180)*(form_pos-global.chos/2)*32
    5. nnn = instance_create(xx,yy,obj_go_there)
    6. //nnn = instance_create(mouse_x+(form_pos-global.chos/2)*35-17,mouse_y+(form_pos-global.chos/2)*35-17,obj_go_there)
    7. nnn.g = nnn



    Danke für die Hilfe. :D

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Alron ()

  • Benutzer online 1

    1 Besucher