Erhöhung einer Variablen überprüfen

  • Allgemein

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

  • Erhöhung einer Variablen überprüfen

    Hallo liebe Mathematiker,

    verzweifelt versuche ich auszulesen ob eine bestimmte Variable sich erhöht hat. Falls ja, soll ein Schalter umgelegt werden.

    GML-Quellcode

    1. var a,aa
    2. a = global.punkte;
    3. aa = a=+25;
    4. if aa then global.drawme2=1;



    global.punkte wird im Sekundentakt um 1 erhöht.


    Wie stelle ich das jetzt an?

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

  • Dein Code sieht irgendwie merkwürdig aus.
    Wenn aa (daher aa>0) dann soll drawme2 auf 1 gesetzt werden?
    Oder willst du wissen, ob aa größer als a ist und daher a erhöht wurde?
    Das wäre dann:

    GML-Quellcode

    1. if aa>a
    2. global.drawme2=1;
  • GML-Quellcode

    1. var a,aa
    2. a = global.punkte;
    3. aa = a=+25;
    4. if (aa){ global.drawme2=1;}

    Ich würde mir schleunigst das klammernsetzen angewöhnen, da sonst bei if-anweisungen Missverstädnisse oder Missinterpretationen auftauchen können.
    Nebenbei macht das "if aa" keinen sinn, da du das mit keinem konkreten Wert vergleichst. Somit wird es auf eine Standartoperation auslaufen.
    "if aa" wird als "if aa == 1" oder "if aa == true" interpretiert.

    Du willst wissen ob global Punkte um 25 erhöht wurde?
    Das kannst du so nicht machen. Du musst die Punkte 2 mal speichern.
    Die aktuellen Punkte als global.punkte und einmal eine Variable wie global.lastPunkte die die PunkteAnzahl repräsentiert die im letzten Step vorhanden war. (praktisch der punktestand vor der letzten addition zw veränderung.)

    Dann prüfst du einfach:

    GML-Quellcode

    1. if(global.punkte >= global.lastPunkte+25){


    dann sollte es funktionieren
  • Danke dir LEWA.

    Der Schnipsel war natürlich nicht das "Endprodukt". Ich habe mir das nur zum Test aus einem anderen Forum(E) kopiert.
    Dein Ansatz ist schon eine super Hilfe aber wie speichere ich jetzt den alten Wert einer Variablen ab?
    global.punkte ändert sich pro Sekunde. Daher würde sich der Wert der Variable global.lastPunkte ja auch ständig ändern.(?)
  • LEWA schrieb:

    "if aa" wird als "if aa == 1" oder "if aa == true" interpretiert.
    Nein, das wird als "if aa >= 0.5" interpretiert. (true ist im GM ja (leider) nur einfach eine 1)
    In diesem Fall macht der Code allerdings wirklich nicht viel Sinn.

    @Lunatic447
    Du musst, wie Lewa beschrieben hat eine weitere Variable haben die den Wert vor dem Ändern speichert...

    EDIT:
    Mach einfach hinter diesem Codeblockk (also hinter dem der sich um das Überprüfen eienr Erhöhung kummert:

    GML-Quellcode

    1. global.lastPunkte = global.Punkte
    und das selbe nochmal ins create-event.
    Damit hast du immer den Wert des letzten Steps in der Variablen.

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)
  • Ha! Es ist zum verrückt werden. Ich stehe gerade total auf dem Schlauch.

    Wenn ich die Variable global.lastPunkte als global.punkte speichere, dann hat doch global.lastPunkte immer den gleichen Wert wie global.punkte xD

    GML-Quellcode

    1. if(global.punkte >= global.lastpunkte+25){global.drawme2=1;}
    2. global.lastpunkte = global.punkte;


    Somit kann das doch nicht gehn.
  • GML-Quellcode

    1. global.lastpunkte = global.punkte;

    Doch das geht. ;)

    Diese Zeile führst du aus BEVOR du die Punkte addierst.
    Beispiel:

    global.punkte = 16;
    Führ die Zeile aus:

    GML-Quellcode

    1. global.lastpunkte = global.punkte;


    nun hat global.lastPunkte den Wert 16.

    Jetzt machst du irgendwelche Punkteberechnungen wie z.B:

    GML-Quellcode

    1. global.punkte+=+24;//addierst zu Punkte die Zahl 24


    Durch die Addition hat nun global.punkte den wert 40.
    global.lastpunkte hat aber immernoch den alten Wert. (16)

    Nun kannst du die obrige if anweisung ausführen um zu schauen ob die Zahl den jeweiligen additionswert überschritten hat.

    Nein, das wird als "if aa >= 0.5" interpretiert. (true ist im GM ja (leider) nur einfach eine 1)

    Das prüft es wirklich so? Wusste ich garnicht. Ich dachte das wird immer direkt als == 1 interpretiert...
  • Ok jetzt hab ichs. Also zumindest weiß ich wo das Problem liegt.

    Ich habe obj_cookie_n vorliegen. Beim Linksklick darauf erhöht sich global.punkte um 1. (obj_cookie_n wird jede Sekunde generiert)
    Wenn ich nun im stepEvent if(global.punkte >= global.lastpunkte+25){global.drawme2=1;} ausführe,
    beträgt der Unterschied beider Variablen immer nur 1.
    Aber die Variable global.lastpunkte müsste ja still stehen bis sie abgefragt wurde ob nun 25 Punkte hinzukamen.
  • LEWA schrieb:

    Zitat
    Nein, das wird als "if aa >= 0.5" interpretiert. (true ist im GM ja (leider) nur einfach eine 1)

    Das prüft es wirklich so? Wusste ich garnicht. Ich dachte das wird immer direkt als == 1 interpretiert...
    Naja der Game maker versteht einzelne Variablen als einen selbsständigen "Ausdruck" wenn man keine Comparators benutzt.
    D.h er versucht die variable als "echtes" true oder false zu interpretieren und im Game maker ist false alles was kleienr als 0.5 ist und true alles was größer-gleich 0.5 ist.
    Damit kann man nette, manchmal perfomance steigernde Tricks anwenden wie: "if a-0.5" was gleichbedeutend ist mit "if a >= 1" (ersteres ist tatsächlich ein paar 10-tausendstel Sekunden schneller xP )
    {EDIT: Oh moment, wir reden ja hier übers Studio.. da kann das alles anders sein, lol! ]


    @Lunatic447
    Achso.. sag das doch gleich.
    Dann mach die Zeile "global.lastpunkte = global.punkte;" hinein in den Block hinter der Abfrage ob 25 Puntke unterschied sind!

    Willst du auf diese Drachen und -eier klicken?
    Sie werden sich freuen ;)

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

  • Wo ist das Problem? Im Create oder Initialize:

    GML-Quellcode

    1. global.punkte = 0;
    2. global.punkte_old = 0;


    Dann erhöhst du immer nur global.punkte. Im Step:

    GML-Quellcode

    1. if (global.punkte_old + 25 <= global.punkte)
    2. {
    3. drawme2 = 1;
    4. global.punkte_old = global.punkte;
    5. }

    © 2008 by Teamgrill Productions
  • Wow..
    Mein Schädel war gestern total am dampfen, kein Wunder fehlte mir dafür das Verständnis^^
    Jetzt ist aber alles klar und funktioniert genau wie gewollt. Ich bin euch allen sehr dankbar, dass ihr euch so viel Zeit genommen habt mit mir.
    Echt spitze! :)

    So sieht jetzt der fertige Code aus:

    GML-Quellcode

    1. var on = 0;
    2. if (global.punkte_old + 5 <= global.punkte) {
    3. global.drawme2 = 1;
    4. on = 1;
    5. }
    6. if (on = 1) {global.drawmetimer2-=1;}
    7. if (global.drawmetimer2<0) {
    8. global.drawme2=0;
    9. on = 0;
    10. global.drawmetimer2=100;
    11. global.punkte_old = global.punkte; }
    Alles anzeigen
  • Benutzer online 1

    1 Besucher