Destroyed Instance_Nearest erkennen

  • GM 8

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

  • Destroyed Instance_Nearest erkennen

    Hallo,
    ich bin gerade an einem RTS-Spiel und ich habe eine Einheit, die die Näheste Instance zerstören soll.

    Kann man irgendwie nun erkennen, wann diese Instance_Nearest zerstört ist?
    Ich dachte da vielleicht an die Entfernung messen. Z.B ist Distanz immer so 120 oder anders und wenn sie schlagartig umspringt (das passiert ja normal wenn sie zerstört ist) z.B. auf 300 wird attack auf false gestellt.

    Bisher wird die Einheit "markiert" dann bis zu einer Distanz verfolgt(Schussreichweite) und dann beschossen und eventuell zerstört.
    Mein Code soweit:

    GML-Quellcode

    1. Im Global Left Released
    2. if selected = true //der Wegpunkt wird platziert
    3. {
    4. selectx = mouse_x // nicht wichtig
    5. selecty = mouse_y // nicht wichtig
    6. if locked = false // nicht wichtig
    7. { locked = true } // nicht wichtig
    8. if place_meeting(o_mouse.x,o_mouse.y,o_dwSoldat) // Hier wird das ausgewählte Objekte (Feind) markiert
    9. {
    10. attackx = instance_nearest(o_mouse.x,o_mouse.y,o_dwSoldat).x //o_mouse ist ein Objekte, welches die Maus verfolgt
    11. attacky = instance_nearest(o_mouse.x,o_mouse.y,o_dwSoldat).y
    12. attack = true
    13. }
    14. else {attack = false} // nicht wichtig
    15. Im Step
    16. if attack = true
    17. {
    18. attackx = instance_nearest(attackx,attacky,o_dwSoldat).x // Die Position des Feindes wird aktualliesiert
    19. attacky = instance_nearest(attackx,attacky,o_dwSoldat).y // Die Position des Feindes wird aktualliesiert
    20. if distance_to_point(attackx,attacky) > 120 {action_potential_step(attackx,attacky,2,0)}
    21. if distance_to_point(attackx,attacky) < 120 {var obj; obj=instance_create(x,y,o_vaSoldatAmmo); with (obj) move_towards_point(other.attackx,other.attacky,5) }
    22. }
    23. }
    Alles anzeigen
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Also zu deiner "Entfernung messen" gibt es eine einfache Funktion.
    Nämlich point_distance(x1,y1,x2,y2).
    Das gibt dir die Entfernung von Punkt(x1,y1) zu Punkt(x2,y2) an.

    GML-Quellcode

    1. attackx = instance_nearest(o_mouse.x,o_mouse.y,o_dwSoldat).x //Das bleibt beides soweit.
    2. attacky = instance_nearest(o_mouse.x,o_mouse.y,o_dwSoldat).y
    3. if point_distance(x,y,attackx,attacky) < 120 //Prüft die Entfernung von dem Mittelpunkt deiner Einheit, zum Gegner und schaut ob sie kleiner ist als 120.
    4. {
    5. //Hier kommt dann dein Code, welcher die Munition erstellt
    6. attack = true //Wenn du die Variabel eventuell brauchst
    7. }
    8. else
    9. attack = false


    Hoffe ich konnte dir helfen. :)
  • Sorry, aber da hast du wohl was falsch verstanden :D

    attack ist ja angreifen, aber wenn sie kleiner < 120 ist, dann greift er ja nicht mehr an, weil attack auf false ist.

    Ich meinte es so: Wenn die Nearst Instance zerstört ist, dann springt (also innerhalt von wenigen Steps) ja die Dinstanz zum Beispiel von 120 auf 150 und also ist das ja ein großer Unterschied, den man irgendwie messen müsste. Wenn die Nearst Instance aber normal fährt legt sie niemals 30 Pixel in sagen wir mal 5 Steps zurück.
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.
  • Ich kapier das jetzt aber auch nicht.
    Deine Einheit greift doch erst an wenn sie < 120.
    Und dann wird auch attack = true gestellt.
    Die 120 steht ja für deine Angriffsreichweite.
    Ich weiß jetzt allerdings nicht woraus du hinauswillst.
  • ok egal, mir kam heute im Bus ein Gedankenblitz :D
    ich habe es so gelöst:

    GML-Quellcode

    1. if attack = true
    2. if point_distance(attackx,attacky,instance_nearest(attackx,attacky,o_dwSoldat).x,instance_nearest(attackx,attacky,o_dwSoldat).y) > 50
    3. {attack = false}
    4. [...]
    Husi012 hat mich nicht mehr in seiner Signatur, ich bin trotzdem noch fame.