Objekte mit gewissem Variablenwert anwählen

  • GM 8

    Objekte mit gewissem Variablenwert anwählen

    Hallo Leute,

    Habe mir gerade einen Account erstellt, weil ich ausnahmsweise mal keine Lösung für mein Aktuelles Problem über Google gefunden habe ;(

    Ich mache mein Problem glaub ich besser mal an einem Beispiel deutlich:

    Angenommen ich habe mehrere instanzen ds selben objekts in meinem raum z.B. 5 Gegner.
    Außerdem habe ich ein Controller-Objekt, das deren Gesundheit überprüft.
    Angenommen alle Gegner mit weniger Gesundheit als 0 sollen zerstört werden.

    Jetzt weiß ich aber nicht, wie ich es anstelle, dass das Controller-Objekt NUR DIE gegner zerstört, die 0 HP haben.

    Ich suche nach einer Art befehl um so etwas in der Art zu schreiben:

    instance_destroy(Gegner), "bei dem die gesundheit unter 0 ist"

    Ich weiß, dass ich auch jeden Gegner selbst seine Gesundheit überprüfen lassen kann. Auf diese Weise währe das auch alles ganz einfach, aber das ist ja nur ein Beispiel und für mein augenblickliches Projekt brauche ich leider unbedingt einen Befehl, mit dem ein Controller-Objekt alle Instanzen eines bestimmten Objekts im Raum, für die etwas bestimmtes Gilt, anspricht.
    Versteht ihr, was ich meine?
    Ich hoffe, einer von euch kann mir da weiterhelfen.

    mfg

    Pr0ph37 :)
    Dafür gibt es das keyword with.
    Benutzen tust du es wie folgt:

    GML-Quellcode

    1. with obj_gegner{
    2. if HP==0
    3. instance_destroy();
    4. }


    Das ist übrigens auch der einzige Weg, instance_destroy auf andere Objekte als das Ausführende anzuwenden.

    Edit: Noch ein kleines Addendum, was da eigentlich passiert.
    Im Prinzip ist es simpel. Der Codeblock in den {}s wird einmal in allen gerade existierenden Instanzen des Objekttyps nach dem Wort "with" ausgeführt. Quasi als ob diese Objekte allesamt einen Skript aufrufen würden - nur schreibst du diesen Skript halt In-Line in den Code eines anderen Objekts. Praktische Sache, das.
    Ah danke für die schnelle Antwort :D

    Die ganze Sache mit with hab ich auch schon gelesen. Dachte mir schon, dass es so funktionieren könnte. Habe nur die Syntax nie so ganz durchblickt.

    Also würde

    GML-Quellcode

    1. with obj_gegner{
    2. if HP==0
    3. instance_destroy();
    4. }


    in "korrektem Satzbau" ungefähr das hier heißen:

    instance_destroy(alle gegner with health < 0)

    Verstehe ich das richtig?