variable_get() ... "object.variable" - Objektindex aus Objektname beziehen?

  • variable_get() ... "object.variable" - Objektindex aus Objektname beziehen?

    Hi allerseits
    Ich versuche gerade, aus einem String eine Variable zu extrahieren.
    Konkret: Benutzer gibt "Objekt1.Variable" oder dergleichen ein und der entsprechende Wert wird zurückgegeben.
    Problem: Es gibt 2 Funktionen, mit denen ich dies bisher versucht habe. variable_local_get und variable_global_get, beide sind allerdings nicht das, was ich suche. Denn die globale Variante scheint lediglich auch nur globale Variablen zu finden(leider nichts mit Elementzeiger Objekt.Variable), während die lokale Variante sowohl lokale als auch globale Variablen erkennt, allerdings nicht über einen Elementzugriffszeiger(Obj.element), das scheint auch die Funktion nicht hinzukriegen.
    Was ich bräuchte, wäre eine Funktion, die in einem (vermutlich globalen)Gültigkeitsbereich wie etwa der im Room Creation Code nach Variablen überprüft(Also wo folgendes funktionieren sollte: "objekt.var",globale "var").
    Is vl etwas schwer zu verstehen... :/
    Es gäbe zwar Lösungen etwa mit execute_string, oder in dem man Objekte und Variablen im string aufteilt und entsprechend so "dereferenziert"... bevor ich aber das mache, frage ich lieber, obs einfachere Methoden gibt =)
    "das war meine letzte flamewar PM an dich ."

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

  • du willst eine Variable (name wird selbst gemacht) von einen anderen objekt ändern oder lesen?
    Wenn ich das so richtig verstanden hab kannst du das mit with machen!

    mach ein script var_get():

    GML-Quellcode

    1. with argument0
    2. return variable_local_get(argument1)


    arg0 = objekt
    arg1 = Var-Name
    Gibt den Wert der Variable wieder.

    und ein script var_set():

    GML-Quellcode

    1. with argument0
    2. variable_local_set(argument1,argument2)


    arg0 = objekt
    arg1 = Var-Name
    arg2 = Var-Wert
    Ändert oder setzt den Wert der Variable.

    damit kannst du die dann ändern (hoffe ich; ungetestet^^)
    „Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher.“
    Albert Einstein
  • Ja sowas in der Art hab ich mir auch gedacht, aber: Das ganze ist ein einziger String, also auch das Objekt is darin enthalten ("objekt.element"), und ich kenne keine Funktion, die einen Objekt-Index aus einem string rausbekommt... Oder überseh ich da was? execute_string möchte ich nur ungern verwenden.

    Das ganze soll später eine Art Debug-Applikation werden, die auf alle möglichen Daten zugreifen kann(Sowas wie der GM-interne Debugger, nur halt was eigenes =P)
    "das war meine letzte flamewar PM an dich ."
  • Das ist nicht das Problem, aber wie kriege ich den Index des Objektes aus diesem String, der den Objektnamen enthält?
    "das war meine letzte flamewar PM an dich ."
  • Erstmal möchte ich sagen, dass man nie direkt auf ne Variable eines Objektes zugreifen sollte, immer nur direkt auf Instanzen.
    Hier trotzdem mal eine Lösung (es gibt bestimmt mehrere, wahrscheinlich auch bessere):
    neues Script:
    object_get_id_from_name

    GML-Quellcode

    1. {
    2. var i,iend;
    3. iend=object_add();
    4. for(i=0;i<iend;i+=1)
    5. {
    6. if(object_exists(i))
    7. {
    8. if(object_get_name(i)==argument0)
    9. {
    10. object_delete(iend);
    11. return i; //Index des Objektes
    12. }
    13. }
    14. }
    15. object_delete(iend);
    16. return -1;
    17. }
    Alles anzeigen

    und nun das Script um den Wert auszulesen:

    GML-Quellcode

    1. var get,obj;
    2. get="object1.txt"; //hier anpassen
    3. obj=object_get_id_from_name(string_copy(get,1,string_pos(".",get)-1)); //Objekt-index
    4. varname=string_copy(get,string_pos(".",get)+1,string_length(get)); //Name der Variabel
    5. with(obj)
    6. {
    7. other.val=variable_local_get(other.varname);
    8. }
    9. show_message(val);


    mfg Dragoon
    int (*x(*x(int))[5])(int*);
    Confused? Yes, it's C!
  • Genau was ich gesucht habe, danke vielmals!
    Könnt man wieder sagen: "Hätte ich auch selbst drauf kommen können"... naja, bin ich leider nicht =P
    Genügt definitiv für meine Ansprüche, dabei überleg ich mir gerade, für was ich das jetzt eigentlich brauche...
    Letztendlich möchte ich den Benutzer ja dann doch auf die einzelnen Instanzen zugreifen lassen.. Danke nochmals =)

    edit: deine Signatur :O Is das ein Zeiger auf einen Array von Funktionszeigern die einen Zeiger auf einen int als Parameter haben?
    "das war meine letzte flamewar PM an dich ."