Variablen und Raumnamen zusammensetzen

  • iOS

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

  • Variablen und Raumnamen zusammensetzen

    Hallo Leute,

    Ich würde gerne zwei Dinge tun.

    Zum einen Variablennamen zusammensetzen um mir Arbeit zu ersparen:

    Ich habe folgende Variablen:

    zahl=1

    text_1=5

    Wie bekomme ich es hin dass ich zum Beispiel abfragen kann ob text_1 "5" ist, indem ich es so schreibe:

    if (text_(zahl)=5)



    Das gleiche würde ich gerne mit Raumnamen machen:

    level=3

    room_goto(Raum_(level))


    Ist ein bisschen schwer zu erklären was ich vorhabe, hoffe ihr habt es verstanden?

    Wär super wenn mir jemand helfen könnte! Ich arbeite übrigens mit Studio, da sind einige Variablen-Funktionen leider obsolete...
  • henrik1235 schrieb:


    Arrays oder Maps.

    Beispiel:
    GML
    text[0] = "A";
    text[1] = "BC";
    text[2] = "XD";

    zahl = 1;

    show_message(text[zahl]);


    Danke, aber das bringt mich irgendwie nicht weiter...

    Kann man Variablen nicht irgendwie zusammensetzen?

    z.B.

    zahl=1

    variable_1=5

    if (variable_(zahl)=5)
    ...

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

  • Ich denke, henriks Hinweis ist ganz gut. Anstatt

    GML-Quellcode

    1. zahl = 1
    schreibst du

    GML-Quellcode

    1. zahl[0] = 1
    2. zahl[1] = 5
    3. zahl[2] = 1904 //... und so weiter
    und dann weiter

    GML-Quellcode

    1. variable = 0 //du kannst ja hier was anderes sagen z.b. 2,
    2. //dann hast du als Bedingung 1904
    3. if(variable[zahl])//...

    Je nachdem welchen Wert "Variable" hat, ist deine Bedingung anders.
    GML lernen geht leicht :)
    1. http://www.gm-d.de/help/ (deutsch)
    2. gm-d.de/wbb/index.php/Thread/2270/ (Einsteiger-Referenz)
    3. docs.yoyogames.com/ (Hilfe auf Englisch von GM:S)
  • Sk.Info.k.P. schrieb:


    Ich denke, henriks Hinweis ist ganz gut. Anstatt

    zahl = 1

    schreibst du

    GML
    zahl[0] = 1
    zahl[1] = 5
    zahl[2] = 1904 //... und so weiter

    und dann weiter

    GML

    variable = 0 //du kannst ja hier was anderes sagen z.b. 2,
    //dann hast du als Bedingung 1904
    if(variable[zahl])//...



    Je nachdem welchen Wert "Variable" hat, ist deine Bedingung anders.


    Danke für Deinen Hinweis, aber da muss ich ja jeden Wert vorher definieren.

    Das heißt ich hätte keinerlei Zeit-/Aufwandersparnis.

    Also kann man Variablen irgendwie anders zusammensetzen?

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von wolfgangkampfgarten ()

  • Also kann man Variablen irgendwie anders zusammensetzen?


    Du kannst Variablenamen nur mit execute_string zusammensetzen und diese Funktion sollte nicht benutzt werden und wurde auch in Studio entfernt. Um den Raumname zusammen zu setzen kannst du asset_get_index benutzen.

    Siehe: gmc.yoyogames.com/index.php?showtopic=581173
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • henrik1235 schrieb:


    Zitat

    Also kann man Variablen irgendwie anders zusammensetzen?


    Du kannst Variablenamen nur mit execute_string zusammensetzen und diese Funktion sollte nicht benutzt werden und wurde auch in Studio entfernt. Um den Raumname zusammen zu setzen kannst du asset_get_index benutzen.

    Siehe: gmc.yoyogames.com/index.php?showtopic=581173


    Vielen Dank, das mit den Raumnamen funktioniert schonmal! :thumbup:

    Könntest Du mir vielleicht ein Beispiel geben wie ich das "Variablenproblem" mit Maps löse? Hab mir das in der Hilfe mal angeschaut aber werde da irgendwie nicht schlau draus... ?(

    Das wär echt super!

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

  • Dein "Variablenproblem" lässt sich leider nicht so lösen, wie du dir das vorstellst. Der Variablenname ist etwas, was nur für den Programmierer existiert. Im fertigen Programm kennt der Computer dann nicht mehr den ursprünglichen Namen der Variable und kann diesen ergo auch nicht zur Laufzeit vergleichen, zusammenschneiden, ändern, etc..
    Es ist deshalb also unmöglich Variablennamen einfach zusammen zu addieren. Wie Henrik schon gesagt hat ist das in älteren Versionen von Game Maker mit execute_string noch machbar, derartige Funktionen wurden aber aufgegeben um höhere Preformance und die Unterstützung von z.B mobilen Plattformen und HTML5 zu ermöglichen.

    Eine Lösung mit Maps unterscheidet sich nur geringfügig von einer mit Arrays. Maps sind auch nur eine Art von Liste in der man Paare von Werten speichern kann und würden deinen Code wohl nur verkoplizieren.
  • peyj schrieb:


    Dein "Variablenproblem" lässt sich leider nicht so lösen, wie du dir das vorstellst. Der Variablenname ist etwas, was nur für den Programmierer existiert. Im fertigen Programm kennt der Computer dann nicht mehr den ursprünglichen Namen der Variable und kann diesen ergo auch nicht zur Laufzeit vergleichen, zusammenschneiden, ändern, etc..
    Es ist deshalb also unmöglich Variablennamen einfach zusammen zu addieren. Wie Henrik schon gesagt hat ist das in älteren Versionen von Game Maker mit execute_string noch machbar, derartige Funktionen wurden aber aufgegeben um höhere Preformance und die Unterstützung von z.B mobilen Plattformen und HTML5 zu ermöglichen.

    Eine Lösung mit Maps unterscheidet sich nur geringfügig von einer mit Arrays. Maps sind auch nur eine Art von Liste in der man Paare von Werten speichern kann und würden deinen Code wohl nur verkoplizieren.



    Und das geht auch nicht über ein script oder so? Oder mit Konstanten?

    Sorry dass ich so hartnäckig bin, aber das ist echt wichtig für mein Spiel...
  • Ich befürchte, du siehst den Wald vor lauter Bäumen nicht und wir können dir nicht wirklich weiterhelfen, weil du dein Problem nicht allgemein genug erklärst. Trete nochmal einen Schritt zurück und erkläre, was du erreichen willst. Damit meine ich nicht das Zusammensetzen der Variablen, sondern warum du glaubst darauf angewiesen zu sein.
  • MewX schrieb:


    Ich befürchte, du siehst den Wald vor lauter Bäumen nicht und wir können dir nicht wirklich weiterhelfen, weil du dein Problem nicht allgemein genug erklärst. Trete nochmal einen Schritt zurück und erkläre, was du erreichen willst. Damit meine ich nicht das Zusammensetzen der Variablen, sondern warum du glaubst darauf angewiesen zu sein.


    Du hast wohl recht, vielleicht gibt es ja auch noch einen anderen Lösungsweg.

    Also ich bräuchte die Lösung an sehr vielen Stellen in meinem Spiel. Die alle hier aufzuführen würde wohl den Rahmen sprengen, daher gebe ich euch ein Beispiel:

    In meinem Spiel kann man pro Level bis zu drei Sterne erreichen, je nachdem wie gut man das Level abgeschlossen hat. Nachdem ein Level beendet wurde landet man im Ergebnisraum des Levels. Hier gibt es das "Ergebnis Controller Objekt". In diesem wird ausgewertet wie viele Sterne erreicht wurden und dies wird dann in einer Variable festgehalten. Nehmen wir mal an es geht um "Level 3", dann heißt die Variable

    "global.sterne_erreicht_in_level_3"

    Mein Spiel hat natürlich auch ein Menu, in dem man auswählen kann welches Level man spielen möchte. Dort gibt es dann für jedes Level einen Button, auf dem angezeigt wird wie viele Sterne in diesem Level bisher erreicht wurden. Dafür braucht man die oben erwähnte Variable:

    Draw Event

    So hab ich es bisher immer gemacht:

    GML-Quellcode

    1. switch (global.sterne_erreicht_in_level_3)
    2. // je nachdem wieviele Sterne erreicht wurden wird das passende Sterne Sprite angezeigt


    Um nun nicht in jedem Button (das Spiel hat 300 Level) die Variable im Draw Event ändern zu müssen, habe ich mir folgendes überlegt: ich lege im Button Objekt im Create Event die Variable

    levelzahl=3

    fest. Nun würde ich im Draw Event gerne die Variable irgendwie zusammensetzen:

    So würde ich es gerne machen:

    GML-Quellcode

    1. switch (global.sterne_erreicht_in_level_(levelzahl))
    2. // je nachdem wieviele Sterne erreicht wurden wird das passende Sterne Sprite angezeigt


    Die Variable "levelzahl" wird NICHT NUR FÜR DAS ANZEIGEN DER STERNE BENÖTIGT! Sondern auch noch für andere Dinge, wie z.B. welche Zahl angezeigt wird und ob das Level bereits erreicht wurde. So müsste ich in jedem Buttonobjekt pro Level lediglich die levelzahl ändern, welche dann alles andere regelt.

    Wie gesagt, DAS IST NUR EIN BEISPIEL, ich bräuchte die Lösung auch noch für viele andere Situationen in meinem Spiel.

    Ich hoffe ihr habt mein Problem verstanden und könnt mir helfen.

    Vielen Dank im Voraus!
  • ach das ist so wie ich das verstehe leicht:

    GML-Quellcode

    1. switch (global.sterne_erreicht_in_level_+string(levelzahl))

    nur warum switch ?
    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 schrieb:


    ach das ist so wie ich das verstehe leicht:
    GML
    switch (global.sterne_erreicht_in_level_+string(levelzahl))

    nur warum switch ?


    Game Maker spinnt gerad wieder mal rum und lässt sich nicht öffnen, daher kann ich es gerade nicht testen, aber ich glaube das hab ich schon ausprobiert und dann kam die Fehlermeldung dass er die Variable "global.sterne_erreicht_in_level_" nicht kennt... Würde es funktionieren wenn ich diese vorher definiere?

    Switch benutze ich an dieser Stelle weil es übersichtlicher und komfortabler ist als if, da es drei verschiedene Sprites sind die man anzeigen könnte.

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

  • switch (global.sterne_erreicht_in_level_+string(levelzahl))

    -> Nehme den Wert von global.sterne_erreicht_in_level_ und addiere dazu den String von levelzahl. Die Variable global.sterne_erreicht_in_level_ wurde nicht definiert und daher gibt es einen Fehler.

    Du kannst keine Variablenamen zusammen setzen (nichtmehr, in den älteren GM Versionen gab es Funktionen dazu Variablen durch Strings zu finden und zu setzen). Du musst Arrays oder eine andere Datenstruktur benutzen, dass ist genau das was du willst!

    GML-Quellcode

    1. switch (global.sterne_erreicht_in_level[aktuellesLevel])


    und den Wert setzen kannst du durch:

    GML-Quellcode

    1. global.sterne_erreicht_in_level[aktuellesLevel] = 42;


    Schau dir bitte folgende Seiten an: gm-d.de/help/hh_start.htm?401_07_arrays.html und gm-d.de/wbb/index.php/Thread/2270/ (Kapitel 8, möglicherweiße willst du dir aber alles durchlesen)
    wupto.net/ Nicht meine Seite!
    We love Koalas.

    GM-D-Spam-o-Meter: 32%
  • Danke für eure Hilfe! :thumbup:

    Wie gesagt lässt sich Game Maker bei mir gerad nicht starten, daher kann ich es gerad nicht ausprobieren. Aber ich denke Arrays sind genau das was ich benötige.

    Werd mich dann nochmal melden wenn ich es getestet habe.


    EDIT:

    So ich konnte es jetzt testen und ES FUNKTIONIERT!!! :thumbsup:

    Mit Arrays kann ich genau das machen was ich möchte. Das erspart mir seeehr viel Zeit und Arbeit!

    Vielen Dank für eure Hilfe und eure Geduld! ;)

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