ID zerstören

  • GM 8

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

  • ID zerstören

    Hallo zusammen,

    Ich habe mehrere Objekte und von diesen Objekten mehrere Instanzen im Raum wie in einem Gitter erstellt. Nun laufe ich durch das Gitter
    mit 2 verschachtelten for Schleifen (wie im 2D Array). Wird eine bestimmte Bedingung erfüllt, soll eine Instanz an der Stelle x,y zerstört werden. Diese Bedingung und Zerstörung soll in der for-Schleife passieren.
    Ich habe es immer mit
    with(ID) {instance_destroy();}
    gemacht. Dabei habe ich die ID mithilfe von "instance_position" in einer Variable gespeicher. Nun habe ich gemerkt dass der Löschvorgang erst ausgeführt wird, wenn die beiden for-Schleifen zu Ende sind. Mir ist es aber wichtig, dass
    es direkt oder nach der inneren for-Schleife passiert (also praktisch nach jeder Zeile in dem Gitter).
    Ich hoffe ich habe mein Problem verständlich erklärt

    Wie kann ich das anrichten, bzw. wieso wird das with(ID)... erst am Ende ausgeführt ??

    Vielen Dank
    Gruß
    virus
  • Interessant.

    Einfache Abhilfe: Eine Flag-Variable einführen, die zur Löschung verdammte Instanzen markiert. Diese Variable fragst du dann einfach zusätzlich ab.

    Andere Möglichkeit, führt aber evtl. zum selben Problem (dürfte aber schneller sein):

    GML-Quellcode

    1. with (objBlubb) {
    2. if (alive) { // nur, wenn with dasselbe Problem wie for hat und eine Instanz eine andere zerstören kann
    3. /* Positionsabfrage etc. */
    4. if (wasauchimmer) { // hier muss vielleicht noch ein alive-Check für andere Instanzen rein
    5. alive = false; // nur, wenn with dasselbe Problem wie for hat
    6. instance_destroy();
    7. }
    8. }
    9. }
  • Also es sieht vereinfacht so aus:

    GML-Quellcode

    1. for(y)
    2. {
    3. for(x)
    4. {
    5. // hier wird etwas überprüft und gegebenfalls die ID der zu löschenden Instanz gespeichert
    6. ...
    7. //Löschvorgang
    8. if(dies und das)
    9. {
    10. with(ID)
    11. {
    12. instance_destroy();
    13. }
    14. }
    15. //weitere Ausdrücke;
    16. }
    17. }
    Alles anzeigen

    Weitere Ausdrücke oben werden sofort ausgeführt, das with... wird erst ausgeführt, nachdem beide for-schleifen fertig sind.
    Ich habe auch versucht ein Skript mit for-Schleife für y zu machen und dieser ruft dann immer die for-Schleife für x im anderen Skript auf (übergibt immer das y). Dasselbe Problem.

    @MewX :Er erkennt das if (wasauchimmer) nicht mehr...Ist wohl so dass er keine Variablen nach dem with erkennt, nur das in der klammer nach with.
  • Verstehe das nicht ganz..

    Also UserEvent: ich mache für die einzelnen Objekte neues Event --> "User Defined"
    In diesem schreibe ich deinen ersten Code!?
    Was ist das control??
    Ich verstehe nicht wie die ID hier übergeben wird

    Danke

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

  • Mal ne kurze Frage: wie erkennst du bei dir, dass die Instanzen erst nach Ablauf der beiden Schleifen zerstört werden?

    Edit:
    Ich vermute mal, dass du die Instanzen noch sehen kannst, nachdem Sie zerstört wurden. Das liegt daran, dass der Screen erst im nächsten Step neu gezeichnet wird.
    Probier mal das hier, nachdem du die ID zerstört hast:

    GML-Quellcode

    1. with ID{ instance_destroy();} screen_redraw(); screen_refresh();

    Albert Einstein schrieb:

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.