Zweite Soldaten Frage

  • Zweite Soldaten Frage

    Also ich hab da meine Einheit das ist ein Objekt names RoterSoldat
    jetzt ist die frage wie bekomme ich das hin
    das wen der Rote Soldat den Blauen Soldat sieht das er dann zu in läuft.
    Meine Idee : eine art Objekt was Trapez Formig ist und was das Sichtfeld des Soldarten dient
    und wen der BlaueSoldat es Toucht dann soll der rote Kurs auf den Blauen Halten.
    Das Prob ist nur ich muss die Position vom Blauen Soldarten an das Sichtfeld Weiter geben und das muss an den Roten Weiter gegeben werden so das es Kurs auf den Blauensoldaten nimmt.
    und es gibt mehre Blaue und Rote Soldarten den muss ich ne ID geben so das die unterschiedlich sind


    Zweite frage: meine Soldarten halten keine Distanz aufeinander wie kann ich das machen das die Distanz halten und nicht in einander gehen.
    Ich darf kein Solide machen sonst haben die Einheiten Probleme mit ihren SichtFeld und verfangen sich -.-
    und das hier
    if point_distance(x,y,TARGET_x,TARGET_y)>30{ mp_potential_step(TARGET_x,TARGET_y,3,0) }
    solte auch auf null 0 bleiben damit sie sich nicht auch verfangen
    und wen sie ein Objekt als Ziel haben sollen die nicht ein Zweites nehmen sondern drauf zuhalten-.-

    Zum anschauen

    Game scheck Demo

    gmk scheck


    Steuerung
    Number1 : Einheit Makieren
    linke maus taste : GO Punkt Makieren
    Sorry bin Legastheniker :cursing:

    Dieser Beitrag wurde bereits 15 mal editiert, zuletzt von NickNick ()

  • Die Frage ist sehr interessant (vor allem, weil ich momentan ein ganz ähnliches Problem hab ;))
    Wenn ich's richtig verstanden habe willst du ein dreieckiges Sichtfeld generieren, indem du ein dreieckiges Objekt nimmst und die Position des Soldaten darauf abfragst.
    Ich würde es aber ungefähr so lösen:

    Im Collision Event (Dreieck mit anderer Soldat):

    GML-Quellcode

    1. Soldat_rot.xsav=Soldat_blau.x;
    2. Soldat_rot.ysav=Soldat_blau.y
    3. Soldat_rot.move=1


    Und dann im Step vom roten:

    GML-Quellcode

    1. if move=1{
    2. move_towards_point(xsav,ysav,/*gewünschter speed*/)
    3. move=0
    4. }


    So müsste das eigentlich klappen.

    Und nun mal eine Frage von mir:
    Ist eine Kollisionsabfrage in einem dreieckigen Feld auch OHNE ein zusätzliches Objekt möglich? Denn eine Funktion collision_triangle() gibt es ja nicht. Lässt sich sowas also mit anderen Kollisionsabfragen nachbilden?
  • Danke für deine Hilfe ich werde es gleich mal ausprobiern

    Zitat von Irrenhaus3

    Und nun mal eine Frage von mir:
    Ist eine Kollisionsabfrage in einem dreieckigen Feld auch OHNE ein zusätzliches Objekt möglich? Denn eine Funktion collision_triangle() gibt es ja nicht. Lässt sich sowas also mit anderen Kollisionsabfragen nachbilden?



    Ich hab das mal noch mal Hier rein wider holt damit die anderen es sehen können. Solte die den Text nur Überflogen haben.


    Dann noch mal hier zu

    Im Collision Event (Dreieck mit anderer Soldat):

    Quellcode

    1. GML
    2. Soldat_rot.xsav=Soldat_blau.x;
    3. Soldat_rot.ysav=Soldat_blau.y
    4. Soldat_rot.move=1



    Und dann im Step vom roten:

    Quellcode

    1. GML
    2. if move=1{ move_towards_point(xsav,ysav,/*gewünschter speed*/)
    3. move=0 }


    geht das auch mit mehrer roten soldarten
    Sorry bin Legastheniker :cursing:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von NickNick ()

  • Es kann sein, dass meine Methode etwas umständlich ist, aber das müsste funktionieren (mit mehreren roten UND mehreren blauen GLEICHZEITIG ^^)
    Also:

    Das "Dreieck-Object" muss ja irgendwie erstellt werden... :D
    Das machst du dann aber nicht über den Room-Editor, sondern übers Object (soldat_rot).
    Dann gibt das Object dem Dreieck Object seine ID:
    (Dabei deklarier ich jetzt auch die Variable die man dafür braucht)
    Soldat_Rot
    Create:

    GML-Quellcode

    1. move=0;
    2. xsav=0;
    3. ysav=0:
    4. inst=instance_create(/*x-Position*/,/*y-Position*/,/*Dreieck Object*/);
    5. inst.soldat=id; //erstellt im gerade erstellten object die Variable "soldat" und weißt ihr die eigene ID zu

    Step:

    GML-Quellcode

    1. if move=1{ move_towards_point(xsav,ysav,/*gewünschter speed*/)
    2. move=0 }


    Dreieck Object
    Collision mit Soldat_blau:

    GML-Quellcode

    1. soldat.xsav=other.x;
    2. soldat.ysav=other.y
    3. soldat.move=1

    Das weißt den Variablen xsav und ysav des Soldat_Rot, der das Dreieck erstellt hat, die Koordinaten des Soldat_Blau zu, der die Kollision ausgelöst hat.

    Und schon verfolgt der RICHTIGE Soldat_Rot den RICHTIGEN Soldat_blau

    Ich hab das jetzt nicht gestestet, aber das müsste gehen.
  • Bei euren Lösungen ist nur das Problem, dass sich das Dreieck weder bewegt, noch mit dem Sichtfeld mitdreht. Man könnte es, wie es so schön in der Hilfe heißt "Der mächtigen Funktion collision_line(...)" anstellen. Aber da unser Soldat nicht nur ein "lineares Sichtfeld" haben soll, müssten wir mittels einer for-Schleife jeden Step, oder zumindest wenn sich die Position/Rotation unseres Soldaten verändert, und lengthdir_x/y, ein "echtes" Sichtfeld erzeugen.
    @Prustel: Ich bin auch C :sauf:
    Oha, die Danksagungen häufen sich... <(o.O)> <(^.^)>
    PM me.
  • wen der soldart 4 sichtrichtung hat ist das eigenlich einfach für 4 sichtobjekte

    step soldarten

    Quellcode

    1. if (direction>=45 and direction<=135)
    2. {inst=instance_create(/*x-Position*/,/*y-Position*/,/*OBeresDreieck Object*/); }
    3. if (direction>=135 and direction<=225)
    4. {inst=instance_create(/*x-Position*/,/*y-Position*/,/*LinkesDreieck Object*/); }
    5. if (direction>=225 and direction<=315)
    6. {inst=instance_create(/*x-Position*/,/*y-Position*/,/*UnteresDreieck Object*/); }
    7. if (direction>=315 and direction<=405)
    8. {inst=instance_create(/*x-Position*/,/*y-Position*/,/*RechtesDreieck Object*/); }


    und beim dreieck in step das es sich immer zerstoren soll

    so taucht es auf und geht auch wider^^
    Sorry bin Legastheniker :cursing:

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von NickNick ()

  • So hat etwas länger gedauert bis ich an den PC gekommen bin :D

    So das example:
    einmal für die Pro (registriert) und einmal für die lite (unregistriert)
    Ich hab zwar nicht die lite um das zu testen aber eigendlich müsste das mit der lite funktionieren...
    Dateien
  • Danke


    Zweite frage: meine Soldarten halten keine Distanz aufeinander wie kann ich das machen das die Distanz halten und nicht in einander gehen.
    Ich darf kein Solide machen sonst haben die Einheiten Probleme mit ihren SichtFeld und verfangen sich -.-
    und das hier
    if point_distance(x,y,TARGET_x,TARGET_y)>30{ mp_potential_step(TARGET_x,TARGET_y,3,0) }
    solte auch auf null 0 bleiben damit sie sich nicht auch verfangen
    und wen sie ein Objekt als Ziel haben sollen die nicht ein Zweites nehmen sondern drauf zuhalten-.-


    Zum anschauen

    Game scheck Demo

    gmk scheck


    Steuerung
    Number1 : Einheit Makieren
    linke maus taste : Go Punkt Makieren
    Sorry bin Legastheniker :cursing:

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von NickNick ()

  • Benutzer online 1

    1 Besucher