Zugriff auf Variablen in anderen Objekten

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

  • Zugriff auf Variablen in anderen Objekten

    Hallo mal wieder liebe Gamemaker Freunde!

    Ich habe habe eine Frage, ob ich außer mit globalen-Variablen zwischen Objekten Werte von Variablen austauschen kann?

    Ich hatte Gedacht "obj_myobject.leben" und in einem anderen Objekt wird dann der aktuelle Lebenswert (BSP: 3) übernommen. Ich habe natürlich schon probiert dies so hinzubekommen, leider ohne Erfolg. Möglicherweise gibt es ja eine Möglichkeit das doch hinzubekommen.

    Gruß Pestamoebe :S
    Dieser Beitrag wurde ausgezeichnet mit einem großen LOB.
  • Hallo, willkommen zurück :)
    Was genau funktioniert nicht?
    Du musst die Id des Objekts benutzen. Außer du hast nur eine Instanz von dem Objekt.
    Bei Kollision kannst du dies so lösen:

    GML-Quellcode

    1. var obj = instance_place(x,y, obj_myobject);
    2. if(obj != noone)
    3. leben = obj.leben;
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Husi012 das war ja schnell, bezieht sich allerdings nur auf den Ort einer Instanz.

    Um Deine Frage, was genau nicht funktioniert, zu beantworten nur kurz:

    Ich habe eine Funktion/Script, wo ich auf Basis des LaserStatuses des SpielerObjekts eine Berechnung für den tatsächlichen Schaden mache. Um jetzt aber dieses Script auszuführen benötige ich in einem anderen Objekt, wo ich die Kollisionen abfrage für das Skript/Funktion den Wert des LaserStatues aus dem SpielerObjekt.

    Generell ging es mir darum so wenig Aufwand wie möglich mit den Abfragen von Kollisionen zu machen, weil das kann später richtig viel werden, und wenn ich da dann mal einen Wert ändern will ... kann ich 10 oder mehr Objekte neu anpassen ... :(

    Ich entwickle die optimale Lösung für mich, weswegen ich frage.

    Ich hatte gehofft wie bei Verkettungen in Javascript irgendwie einen Austausch zu ermöglichen. Das wäre recht praktisch, in jedem Fall.

    Gruß pestamobe und danke nochmal für Deine rasche Antwort
    Dieser Beitrag wurde ausgezeichnet mit einem großen LOB.
  • Also im Kollisions Event kannst du die Variable other benutzen. Also other.leben.
    Ohne kannst du instance_place benutzen. Bei Kollision mit dem angegebenen Objekt die Id davon zurück gegeben und du kannst diese nutzen.
    Wenn keine Kollision stattfindet, wird noone zurückgegeben.

    Also einfach statt obj_myobject.leben, other.leben bzw. obj = instance_place(...); obj.leben
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe
  • Du kannst auch beim laser, in der kollision mit dem spieler das scripts als obj_spieler aufrufen. Gegebenenfalls musst du den laserstatus oder die stärke mitgeben als parameter.

    GML-Quellcode

    1. if collision == true
    2. {
    3. with(obj_spieler)
    4. {
    5. leben -= scr_laserdamage(other.laserstrength,leben,schild,etc);
    6. }
    7. }

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Danke für eure Tipps.

    Aber genau diese Schreibweise funktioniert auch aus anderen Objekten heraus tadellos: object.variable.

    Ich hatte einen anderen Fehler aber via show_debug_message() konnte ich den sich korrekt verändernden Inhalt sehen.
    Dieser Beitrag wurde ausgezeichnet mit einem großen LOB.