Script: arumente verändern und ausgeben

  • GM 8

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

  • Script: arumente verändern und ausgeben

    Hi Leute
    Ich hab mal eine eher unwichtige Frage: Wie macht man einen Script der die Variable argument0 verändert. Ja so wird das warscheinlich keiner verstehen deswegen hier mal ein Beispiel:
    So ruft man das Script ab:

    GML-Quellcode

    1. //invert ist der Name meines Scripts
    2. invert(speed)//da kommt irgendeine Variable rein


    Hier Das Script:

    GML-Quellcode

    1. //invert()
    2. //"Umkehrung" von Variablen
    3. if argument0 = 0
    4. {
    5. argument0 = 1
    6. }
    7. else
    8. {
    9. argument0 = 0
    10. }
    11. //Hier muss noch irgendwas rein.
    Alles anzeigen

    Jetzt will ich machen das er die Variable die man eingegeben hat zu argument0 macht
    Das umkehren geht natürlich aber jetzt brauch ich irgendein code der speed = argument0 macht.
    mit return geht das ja nicht.
    Twitter: @BytingGames
  • GML-Quellcode

    1. speed = invert(speed)


    GML-Quellcode

    1. //invert()
    2. //"Umkehrung" von Variablen
    3. var speedVar;
    4. speedVar = argument0
    5. if speedVar = 0
    6. {
    7. speedVar = 1
    8. }
    9. else
    10. {
    11. speedVar = 0
    12. }
    13. return speedVar;
    Alles anzeigen
    So sollte es eigentlich gehen...
  • Ich weiß so hatte ich es dafor, aber ich will das

    GML-Quellcode

    1. speed = invert(speed)

    in

    GML-Quellcode

    1. invert(speed)

    machen, weil das für andere Codes die ich machen will wichtig ist.

    Wie geht das denn bei z.b.

    GML-Quellcode

    1. variable_local_set(speed, 1)
    2. //das sieht ja auch nicht so aus:
    3. speed = variable_local_set(speed, 1)


    Ich will das die Variable in dem Code zu argument0 gesetzt wird, ich hoffe ihr versteht jetzt was ich meine.
    Twitter: @BytingGames
  • Da dein ursprünglicher Aufruf des Skritps lediglich den Wert übergibt, wäre die einfachste Lösung dies:

    GML-Quellcode

    1. // Der neue Aufruf übergibt den Namen der Variable als string
    2. invert("speed");


    GML-Quellcode

    1. // invert(str_var);
    2. variable_local_set(argument0, variable_local_get(argument0) * -1);


    bzw. in deinem Fall:

    GML-Quellcode

    1. // shift(str_var);
    2. variable_local_set(argument0, 1 >> variable_local_get(argument0));

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

  • Ok das ist schonmal ganz gut so sieht mein Code jetzt aus:

    GML-Quellcode

    1. invert("speed")

    GML-Quellcode

    1. variable_local_set(argument0, 1 >> variable_local_get(argument0));


    Warum muss man den jetzt oben invert("speed") hinschreiben, und wieso geht das nicht:

    GML-Quellcode

    1. invert(string(speed))

    Kann man die "" nicht irgendwie weglassen?
    Twitter: @BytingGames
  • Das ist die Frage die nur du selbst beantworten kannst:
    willst du, dass der Wert von speed übergeben wird? Dann brauchst du keine Klammern.
    Oder willst du, dass "speed" als Text übergeben wird? Dann brauchst du die Klammern.

    Ich versteh ehrlich gesagt nicht so ganz was du machen willst!

    Wenn du den Namen für variable_local_set übergeben willst, überträgst du ja einen Namen, also Text, also brauchst du die Klammern.
  • Ok aber wie funktioniert denn der Code bei variable_local_set?
    Ich meine da schreibt man doch auch keine "" rein.

    GML-Quellcode

    1. //Das sieht ja dann so aus:
    2. variable_local_set(speed,1)
    3. //Und nicht so:
    4. variable_local_set("speed",1)

    könnte mir mal jemand den "script" von variable_local_set, also woraus der code besteht schreiben?
    Oder kann man soeine Funktion garnicht machen (natürlich ohne "")
    Da wird ja auch die Variable ohne "" übergeben...
    Hoffentlich ist es jetzt verständlich :S
    Twitter: @BytingGames
  • Die Variable Funktionen erwarten den Variablennamen als string, da der Interpret/Runner/GM dann nicht den Wert der Variable nimmt.
    Es gibt keine Pointer wie in anderen Sprachen beim GM, daher kann man nur so die Variable ändern.
    string("test") und string(test) sind zwei unterschiedliche Dinge!
    könnte mir mal jemand den "script" von variable_local_set, also woraus der code besteht schreiben?
    Das ist eine GM-Interne Funktion und dieser liegt ÜBER GML, was heisst die Funktion kann die Variablen in der Map(oder wie auch immer Variablen intern gespeichert werden) verändern. Während man in GML nur eben diese Funktion verwenden kann.
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • iks deh schrieb:

    Ich meine da schreibt man doch auch keine "" rein.

    GML-Quellcode

    1. //Das sieht ja dann so aus:
    2. variable_local_set(speed,1)
    3. //Und nicht so:
    4. variable_local_set("speed",1)

    Hast du das überhaupt mal überprüft? Es funktioniert nämlich nur mit Anführungszeichen.

    iks deh schrieb:

    Ok aber wie funktioniert denn der Code bei variable_local_set?
    [...]
    könnte mir mal jemand den "script" von variable_local_set, also woraus der code besteht schreiben?
    Oder kann man soeine Funktion garnicht machen (natürlich ohne "")

    Die Funktion variable_local_set könnte man höchstens mit execute_string nachbauen. Das sähe dann in etwa so aus

    GML-Quellcode

    1. argstr = string(argument1);
    2. if (is_string(argument1)) {
    3. argstr = '"'+argstr+'"';
    4. }
    5. execute_string(argument0+" = "+argstr);

    Der GM wird die Funktion variable_local_set aber sicher anders und effizienter umgesetzt haben, wie man es aber mit GML nicht tun kann.

    Um sich den Unterschied zwischen

    GML-Quellcode

    1. speed

    und

    GML-Quellcode

    1. "speed"

    klar zu machen, stellt man sich Ersteres einfach als die Variable selber vor und Letzteres als einen Pointer auf diese Variable. Wie henrik1235 schon gesagt hat, muss man das im GM leider so machen, da es sowas wie Pointer oder Referenzen nicht gibt.
  • Call by Rerence gibt es im GM leider nicht für normale Variablen (bei Listen, Instanzen, Ressourcen, ... werden ja Referenzen übergeben).

    Abgesehen davon möchte ich von execute_script und variable_... abraten. In GM:Studio sind diese Funktionen zum Teil nicht verfügbar und gelten aus Sicht der Entwickler als schlechter Stil.

    Übergib stattdessen die Instanz-Id und arbeite direkt auf der Instanz, wenn dir das lieber ist.