Doppelte Variablen in Scripts?

  • GM 8

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

  • Doppelte Variablen in Scripts?

    Ist es möglich in einem Objekt eine Variable mit dem Namen a zu haben und in diesem Objekt dann einen Script auszuführen in dem eine neue Variable gemacht wird?
    Hier ein Beispiel zum verstehen:
    :event_create: - Event von dem Objekt:

    GML-Quellcode

    1. a = 0
    2. a = berechne()


    in dem Script berechne() steht:

    GML-Quellcode

    1. var a;
    2. return random(100)


    Jetzt gibt es ja 2 Variablen die a heißen, ich habs ausprobiert hat geklappt, aber ich glaube nicht das das Fehlerlos geht.
    Also gibts da dann Fehler?
    Twitter: @BytingGames
  • Es geht fehlerlos.
    Wenn du var in einem Script benutzt, wird die lokale Variable "beschattet" und die alte Variable kann dann über self.a betrachtet werden.
    edit: Sie arbeiten also dann unabhängig, können also nicht gleichzeitig durch einen Fehler geändert werden.

    - Tobi97
    8|
  • Du musst bei GML zwischen drei Typen von Variablen unterscheiden, wobei alle diese Typen in verschiedene "Scopes" untergeteilt sind:
    1. lokale Variablen
    2. globale Variablen
    3. temporäre "Skript-Variablen"
    In deinem Falle kann das Ganze aber zu einem gewissen Konflikt führen, denn der GameMaker benutzt zur Unterscheidung des ersten und dritten Typs keine Keywords. Ich würde lieber dein Vorhaben ändern, und darauf achen (auch wenn es in deinem Falle zu funktionieren scheint) auf verschiedene Namen für deine Variablen zu setzen.

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

  • Ah ok danke, jetzt hab ich aber noch 2 Fragen :D
    Das hier ist zwar jetzt n komisches Beispiel aber egal:

    GML-Quellcode

    1. var a;
    2. a = 10
    3. object_event_add(object_index,ev_alarm,0,"a = argument0");
    4. //argument0 wird bei dem ausführen des Scripts natürlich eingegeben, der Wert ist aber unwichtig.


    1. Frage: bei object_event_add das argument0 sollte doch von dem Script kommen, also der Wert von argument0 wird in den alarm überwiesen oder?
    2. Frage: Wird hier das a jetzt vom Objekt genommen?


    EDIT:
    oder was würde passieren wenn man argument0 gegen a austauschen würde? EDIT2:Ist ja dann logisch
    Sorry dass ich so viele Fragen stelle ^^
    Twitter: @BytingGames

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

  • So wird das nicht funktionieren, denn in diesem Event steht dann "argument0...." und nicht der Wert von argument0.

    Aber du könntest direkt im Skript einer lokalen Variable "alarm" den Wert von "argument0" zuweisen, was viel eleganter erscheint. (Auf "alarm" sollte dein Objekt dann natürlich Zugriff haben, also kein "var..." bei "alarm" verwenden.)
  • Zur 1. Frage: Wenn ich sie richtig interpretiere funktioniert das so nicht. Du musst den wert in argument0 an den Wert anknüpfen mit: "a = '"+string(argument0)+"';";
    Zur 2. Frage: Das a wird vom Objekt genommen, weil der Code innerhalb des Alarm Events, also im Objekt, nicht mehr im Script ausgeführt wird. (Die Variable, die mit var initialisiert wurde, wird nach dem Script vom RAM gelöscht.)

    - Tobi97
    8|
  • Gut jetzt zu dem was ich eigentlich programmieren will, ich will dass in dem Script eine Variable nach einer bestimmten zeit zu einer bestimmten zahl gemacht wird.

    GML-Quellcode

    1. script("a",3,30)
    2. //argument0 = die Variable die nach der Zeit von argument2 zu argument1 geändert wird.
    3. //argument1 = der neue Wert
    4. //argument2 = die Zeit

    in dem script() steht dann:

    GML-Quellcode

    1. alarm[0] = argument2
    2. object_event_add(object_index,ev_alarm,0, argument0+" = "+string(argument1) );

    Aber das Funktioniert irgendwie nicht hat jemand ne Ahnung wie mans richtig macht?
    Twitter: @BytingGames