ID-Nummeranzeige im Room-Editor

  • Allgemein

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

  • ID-Nummeranzeige im Room-Editor

    Hi Leute

    Habe mir nach langen überlegen mein GM 8.1 auf GM-Studio upgedatet. Wohl auch deswegen weil ich bei einen Projekt mit arbeite. :)
    Aber jetzt zur meine Frage:
    Im GM 8.1 war im Room-Editor die ID-Nummer, sobald man mit der Cursor über das Objekt war, sichtbar.
    Nun bei GM-Studio ist das zwar auch der Fall aber die sieht so aus id: ins_5492ff2e.
    Nicht was ich brauche. Ich brauch die id-Nummer die mit 100000 beginnt. Gut ich kann Sie mir ansehen wenn ich den Debuggmodus einschalte und auf Show Instances schalte.
    Dann habe ich alle ID-Nummern von den Objekten im Raum. Brauche aber nur bestimmte ID-Nummern als Vergleich. Ich möchte Schalter mit bestimmten Türen benutzen im Spiel.
    Gibt es da irgendwo eine Einstellung wo man das umschalten kann bei GM-Studio?

    Gruss Drachen
  • Hi Drachen,


    wenn du die istanz erstellst mit

    obj_schalter.var_instID = instance_create(10, 10, obj_Tuer);
    var_instID.var_tuer_offen = false;



    und dan dem Schalter ein z.B ein Mausklickevent hinzufügst welches folgenden code enthält

    if(var_tuer_offen == false)
    { var_instID.var_tuer_offen = true;
    }
    else
    { var_instID.var_tuer_offen = false;
    }



    dann müsste dir das doch genügen oder?
    Somit interessiert dich ja gar nicht was es für eine ID hat, es reicht wenn der Schalter es weis.
  • Da kann man leider nichts machen. Das System wurde für die HTML5-Version verändert und in GM:S beibehalten. Die Nummern lassen sich leider auch nicht ineinander umrechnen, da die Hexzahlen nicht aufeinander folgen im Gegensatz zu den dezimalen IDs.

    Related Threads:
    gmc.yoyogames.com/index.php?showtopic=567889
    gmc.yoyogames.com/index.php?showtopic=583541

    Ich würde allerdings eh empfehlen, nichts in Abhängigkeit dieser Nummern zu programmieren, sondern dir etwas zu überlegen, dass ohne auskommt. Du könntest z.B. Verbindungsobjekte einführen wie folgt:
    erstelle verschiedene Objekte, die für Verbindungen (etwa von Türen und Schaltern) dienen sollen. Platziere im Editor jeweils eine Instanz des gleichen Verbindungsobjektes auf den zu verbindenden Objekten (ein auf die Tür, eine auf den Schalter). Diese Objekte sollen im Create-Event dann jeweils nach anderen Instanzen ihrer Art suchen und dann prüfen, auf was für einem zu verbindenden Objekt sie sich befinden und deren Verknüpfungen dann festlegen. Danach können sich diese Verbindungsobjekte einfach löschen.
    Ich hoffe das ist einigermaßen verständlich.
  • Dazu müsste er das Spiel ebenfalls erst starten. Soweit ich das verstanden habe, möchte er mit möglichst wenig Aufwand Instanzen miteinander verknüpfen...
  • BadToxic schrieb:

    Dazu müsste er das Spiel ebenfalls erst starten. Soweit ich das verstanden habe, möchte er mit möglichst wenig Aufwand Instanzen miteinander verknüpfen...


    Wie wäre es wenn du zu deiner, wie du es nennst einfachen, Lösung ein Beispiel postest.

    Ich finde diese halben Anworten nicht wirklich hilfreich, meistens resultieren dadurch nur folgefragen... ja und wie mach ich das jetzt ect. ?(


    Wenn du jemandem der etwas süsses will empfiehlst einen Kuchen zu backen sei doch so anständig und gib ihm gleich ein Rezept dazu. ;)
  • Hi
    Erst mal vielen Dank für eure Antworten, das was mir BadTonix gesagt hat


    Da kann man leider nichts machen. Das System wurde für die HTML5-Version verändert und in GM:S beibehalten. Die Nummern lassen sich leider auch nicht ineinander umrechnen, da die Hexzahlen nicht aufeinander folgen im Gegensatz zu den dezimalen IDs.


    War schon sehr Aufschlußreich im Bezug zur ID-Nummmer.
    So jetzt versuche ich es zu Erklären warum ich die ID-Nummern brauche. Hoffe ich bekomme es hin. :)
    Hier mal ein Bild vom Tutorial vom Spiel, dort wird schrittweise erklärt was im Spiel vorkommt.

    Hier Raum 01


    Und hier der Übersichtsplan des kompletten Tutorial


    Also jede Abteilung ist ein Raum.
    Im Spiel hat jeder Schalter seine Tür, und es gibt nicht nur Türen, sondern auch Fallen mit Schalter.
    Deswegen war es für mich immer Hilfreich im Room-Editor, wenn ich dort das Level aufbaue, mir die ID-Nummer auf ein Blattpapier auf zuschreiben.
    Ich habe mir deswegen schon lange den Kopf zerbrochen wie ich das lösen könnte mit den Schaltern und Tore. Die einzige Lösung die mir einfiel, sieht bei mir so:
    Script:

    GML-Quellcode

    1. var id_Instance;
    2. id_Instance = 0;
    3. //////////////////////////////////////////////////////
    4. // Auflistung aller ID von den Schalter und Tore //
    5. //////////////////////////////////////////////////////
    6. lev01_Sch[1] = 100020; // Instance.id vom Schlater 1 im 1. Raum
    7. lev01_Tor[1] = 100001; // Instance.id vom Tor 1 im 1. Raum
    8. // usw.
    9. //////////////////////////////////////////////////////
    10. // Schalter dem Tor zuweisen //
    11. //////////////////////////////////////////////////////
    12. if (argument0 == lev01_Sch[1])
    13. {
    14. id_Instance = lev01_Tor[1]
    15. }
    16. // usw.
    17. return id_Instance; // Rückgabewert des ID für das Tor
    Alles anzeigen


    Kollision - Event mit Schalter beim Player

    GML-Quellcode

    1. {
    2. id_Tor = 0;
    3. id_Schalter = 0;
    4. ////////////////////////////////////////////
    5. // Id von dem Schalter bestimmen bei //
    6. // dem der Player steht //
    7. ////////////////////////////////////////////
    8. id_Schalter = other.id;
    9. ////////////////////////////////////////////
    10. // Jetzt das Script aufrufen damit die //
    11. // ID vom dem richtigen Tor geholt wird //
    12. // damit diese auf geht //
    13. ////////////////////////////////////////////
    14. id_Tor = scr_id_Schalter_Tor(id_Schalter); // hier ist die ID von dem Tor das aufgehen soll
    Alles anzeigen


    Im selben Event wie vorher

    GML-Quellcode

    1. // Türknopf gedrückt //
    2. //////////////////////////////////////////////////////
    3. {
    4. if (keyboard_check_pressed(ord("A")))
    5. {
    6. sprite_index :=spr_Player_Knopf;
    7. image_index = 1;
    8. x = other.x-8
    9. if (id_Tor.image_index == 11) exit;
    10. id_Tor.image_speed =1/5;
    11. }
    12. if (keyboard_check_released(ord("A")))
    13. {
    14. sprite_index :=spr_Player_Knopf;
    15. image_index = 0;
    16. }
    17. if (id_Tor.image_index > 3)
    18. {
    19. id_Tor.image_speed =0;
    20. id_Tor.image_index =12;
    21. }
    22. }
    Alles anzeigen


    somit kann ich jeden Schaler sein Tür zuweisen, muss mir aber vor die ID-Nummer beim Levelaufbau aufschreiben.
    Wenn jemand eine andere Idee hat nur her damit. Aber meine Eigentliche Frage wurde mir ja beantwortet.

    Jetzt noch einmal zu BadTonix:
    Ganz habe ich es nicht verstanden wie du das Gemeint hast mit den Verbindungsgang. Könntest du ein kleines Tut machen ?

    Gruss Drachen

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

  • Momentan hab ich leider keine Zeit für ein Tutorial. Evtl. komme ich heute Abend mal dazu. Aber zunächst versuche ich es nochmal mit etwas weiterer Erläuterung:

    Für die maximale Anzahl an solchen Verbindungen, die gleichzeitig in einem Raum existieren können sollen, erstellst du je ein Objekt obj_connector_1 bis obj_connector_n.
    Dieses prüft im Create sowas wie

    GML-Quellcode

    1. i = instance_nearest(x, y, obj_schalter);
    2. if(point_distance(x, y, i.x, i.y) < 64){ // Verbindungsobjekt liegt auf dem Schalter
    3. with obj_connector_1 do if(id!=other.id){ // Partner Verbindungsobjekt wurde gefunden (Ein Schalter kann auch mehrere Türen öffnen...)
    4. j = instance_nearest(x, y, obj_tuer);
    5. if(point_distance(x, y, j.x, j.y) < 64){ // Verbindungsobjekt-Partner liegt auf der Tür
    6. // jetzt liegen in other.i und in j die jeweiligen Instanzen vor und können verknüpft werden
    7. // ...
    8. }
    9. instance_destroy(); // Verbindungsobjekt wird nicht mehr benötigt
    10. }
    11. }
    12. instance_destroy(); // Verbindungsobjekt wird nicht mehr benötigt
    Alles anzeigen

    Ich hoffe damit wird es verständlich. Somit musst du keine Nummern mehr rausschreiben und kannst die Verbindungen direkt im Editor erstellen.
  • Hi BadToxic

    Habe mir heute Abend mal deinen Code angeschaut. Bin aber nicht ganz schlau daraus geworden, wie du das mit den Objekten von Connector gemeint hast.
    Soll ich nun für jeden Schalter und Tür einen Connector setzen mit ein und den selben Objekt.

    siehe Bild


    Wie du unten im Bild sehen kannst ist dann im Spiel ein Fehler aufgetreten bei deiner Routine.

    ############################################################################################
    FATAL ERROR in
    action number 1
    of Create Event
    for object obj_connector_01:

    Push :: Execution Error - Variable Get -1.j(100035, -1)
    at gml_Object_obj_connector_01_Create_0 (line 3) - if (point_distance(x, y, i.x, i.y) < 64)
    ############################################################################################


    Nun weis ich leider nicht, worin der Fehler besteht. Vielleicht habe ich ja auch was falsch verstanden wie du es gemeint hast.

    Gruss Drachen
  • Ja, sieht ja schon fast so aus als hättest du das Prinzip verstanden. Für jede Verbindung ein Connector-Objekt, d.h. wenn du z.B. einen Schalter hast, der 3 Türen öffnen soll, brauchst du insgesamt 4 Instanzen des selben Connector-Objektes.

    Die 64 Pixel hab ich natürlich nur mal so dahingestellt - die Connectoren müssen natürlich auch nah genug an den Türen/Schaltern sein.
    An deinem Fehler kann ich ohne den Kontext leider nicht sehen, wo genau das Problem liegt. Er zeigt einen Fehler mit der Variablen j. Evtl wurde hier keine entsprechende Instanz gefunden per instance_nearest. Das kannst du prüfen mit
    if(j != noone) if(point_distance(x, y, j.x, j.y) < 64){ ... }
    Oder j existiert an dieser Stelle gar nicht.
    Ich müsste also mehr von deinem Code sehen um den Fehler zu finden...
  • Hi BadToxic

    Ok - jetzt habe ich es verstanden. Werde mir später deinen Code noch mal genauer unter die Lupe neben, und entsprechend abändern.
    Hab vielen Dank für deine Hilfe.
    Meine Idee war nicht so berauschend, da ich sobald eine Objekt lösche, aus dem Room-Editor meine aufgeschriebene ID-Nummer nicht mehr stimmt.
    Denn dann verteilt der GM - die ID-Nummern neu beim starten vom Spiel.

    Gruss Drachen
  • Wie ich gesehen habe, hast du es ja fast geschafft. Aber warum legst du einen zweiten Thread zum gleichen Thema an?
    Ja, das mit den vaiablen IDs war auch der Grund, warum ich mir diese Vorgehensweise überlegt habe.
    Allerdings würde ich auch das heut zu Tage nicht mehr nutzen, sondern mir direkt einen in-game-Editor schreiben, in dem ich so etwas bequemer lösen kann. Aber ich glaub so weit bist du ja noch nicht ;)