Probleme bei einer Do - Schleife

  • GM 8

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

  • Probleme bei einer Do - Schleife

    Hi an alle

    Hier habe ich eine Routine von BadToxic mit einer Do-Schleife.
    Leider spuckt mit GM-Studio immer einen Klammer - Fehler aus. Aber ich kann daran nichts falsches sehen, alle Klammer werden geschlossen.
    Wenn ich die Do-Schleife raus nehme funktioniert die Routine ohne Probleme. Aber die Routine muss mindesten einmal die If - schleife durch laufen, sonst fehlt mir das Ergebnis am Ende.

    Hier mal die Routine

    GML-Quellcode

    1. /////////////////////////
    2. // Variabeln festlegen //
    3. /////////////////////////
    4. id_Schalter = 0;
    5. id_Tor = 0;
    6. ///////////////////////////////
    7. // den Connector weist dem //
    8. // Schalter_ID die richtige //
    9. // Tor_ID zu //
    10. ///////////////////////////////
    11. id_Schalter = instance_nearest(x, y, obj_Schalter_Tor);
    12. if (point_distance(x, y, id_Schalter.x, id_Schalter.y) < 16) // das Connector Objekt ist in der Nähe vom Schalter
    13. {
    14. with (obj_conn_01)
    15. {
    16. //do
    17. //{
    18. if(id!=other.id)
    19. {
    20. id_Tor = instance_nearest(x, y, obj_Tor); // Partner Connector Objekt wurde gefunden (Ein Schalter kann auch mehrere Türen öffnen...)
    21. }
    22. //}
    23. }
    24. }
    25. show_message("ID-Schalter =" + string(id_Schalter) + " ID-Tor =" +string(id_Tor));
    Alles anzeigen


    So wie die Routine jetzt ist, kommt kein Fehler, wenn ich die Do-Schleife wieder einbinde erscheint ein Klammerfehler. Wo liegt da der Hase begraben?

    Gruss Drachen
  • Ja, ich sehe auch absolut keinen Nutzen einer Schleife hier...

    Aber du hast noch einen weiteren Fehler in Zeile 24, die müsste wie folgt lauten:

    GML-Quellcode

    1. other.id_Tor = instance_nearest(x, y, obj_Tor);
    sonst speicherst du das Tor in eine andere Instanz als den Schalter.
  • Hi BadToxic

    Ok das mit der Do-Schleife habe ich jetzt verstanden, werde ich wahrscheinlich auch nicht brauchen.

    Aber das Problem an dieser Routine ist jetzt, das er den zweiten Connector im Raum nicht findet, damit er mir mein zweite ID-Nummer ausspuckt.

    Hier nocheinmal das Bild


    Dazu deine Routine etwas abgeändert von gestern

    GML-Quellcode

    1. /////////////////////////
    2. // Variabeln festlegen //
    3. /////////////////////////
    4. id_Schalter = 0;
    5. id_Tor = 0;
    6. ///////////////////////////////
    7. // den Connector weist dem //
    8. // Schalter_ID die richtige //
    9. // Tor_ID zu //
    10. ///////////////////////////////
    11. id_Schalter = instance_nearest(x, y, obj_Schalter_Tor);
    12. if (point_distance(x, y, id_Schalter.x, id_Schalter.y) < 16) // das Connector Objekt ist in der Nähe vom Schalter
    13. {
    14. with (obj_conn_01)
    15. {
    16. if(id!=other.id)
    17. {
    18. other.id_Tor = instance_nearest(x, y, obj_Tor); // Partner Connector Objekt wurde gefunden (Ein Schalter kann auch mehrere Türen öffnen...)
    19. }
    20. }
    21. }
    22. show_message("ID-Schalter =" + string(id_Schalter) + " ID-Tor =" +string(id_Tor));
    Alles anzeigen

    Irgendwie führt er die with -Schleife nicht richtig aus.

    Gruss Drachen
  • DragonGamer schrieb:

    Welches Objekt führt diesen Code aus?
    Wenn er es richtig macht, ist es das obj_conn_01-Objekt im Create-Event.

    Drachen schrieb:

    Ok das mit der Do-Schleife habe ich jetzt verstanden, werde ich wahrscheinlich auch nicht brauchen.
    Ähm, ein do kommt da schon hin:

    GML-Quellcode

    1. with obj_conn_01 do{...}
    Denn das do gehört zu dem with.
    Ich sehe gerade sonst keinen Fehler mehr - würde mich wundern, wenn das nicht funktionieren würde, sofern zwei obj_conn_01-Instanzen, die nah genug an Schalter und Tür sind, existieren.

    Wenn du immer noch Probleme damit hast, kannst du mir auch mal deine Datei geben...
  • Hi BadToxic

    Habe dir die Datei per Mail geschickt, da Sie für hier zu groß wäre.
    Was ich nicht gewusst habe das es das with do gibt, in der Hilfe ist es auf jeden Fall so nicht auf geführt.
    Aber man lernt nie aus. Jetzt bin ich gespannt ob du diesen blöden Fehler findetst.
    Im Voraus vielen Dank für deine Mühe

    Gruss Drachen :thumbsup:
  • Ich hab dir die korrigierte Version zurück geschickt.

    Neben dem do (wenn auch irrelevant), war (wie ich ja auch als mögliche Ursache genannt hatte :P ) der Connector zu weit von der Tür entfernt. Es waren 72 Pixel, anstatt die maximal 16, auf die du prüfst. Du musst hier darauf achten, dass es nicht reicht, dass sich die Instanzen im GM-Editor überlagern. Es zählen die eingestellten Origins der verwendeten Sprites, die mit (0, 0) bei dem Connector und (0, 32) bei der Tür, zu weit auseinander lagen. Ich hab den Connector also einfach ein Stück nach unten und links verschoben und schon geht das ganze. Zudem hab ich noch dafür gesorgt, dass danach die beteiligten Connectoren automatisch gelöscht werden...

    Viel Spaß und Erfolg mit allem Weiteren.


    DragonGamer schrieb:

    Ähm, bittewas?
    "do" hat rein garnichts mit "with" zutun.
    With selbst ist schon eine Schleife. D.h. sie führt den Code für alle Instanzen aus.
    Ja, ok... das with funktioniert auch ohne das do. Aber als ich es damals kennengelernt habe, wurde immer ein do dahinter geschrieben... so habe ich es halt gelernt :P macht ja nix.