Variable kann nicht geändert werden

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

  • Variable kann nicht geändert werden

    Heyho :)

    Habe seit längerem mal wieder eine Frage, ich habe eine Variable in einem Objekt "blinkPossible", die entweder false oder true ist. Folgendes Problem:

    Ein Objekt, dass von einer zur anderen Seite im Raum läuft und sich außerhalb des Raumes umdreht, ist versehen mit dieser Variable. Ist das Objekt in der Mitte des Raumes (also room_width/2 oder?), soll die Variable auf true gesetzt werden. Außerhalb des Raumes wird sie wieder auf false gesetzt. Ich habe im Step Event die Abfrage

    GML-Quellcode

    1. ​if (x = room_width/2)
    2. {
    3. blinkPossible = true;
    4. }


    welche aus irgendeinem Grund allerdings nicht blinkPossible auf true setzt. Ich habe echt keine Ahnung was ich falsch mache xD

    WICHTIG:

    Mit der Variable will ich bezwecken, dass in der Mitte des Raumes der image_index des Objekts einmal durchläuft und dann wieder stoppt bei 0. Vielleicht kann ich das auch einfacher machen? Die Animation soll aber nur in der Mitte des Raumes einmal abfolgen.
    Es gibt 10 Arten von Menschen: Diejenigen, die Binärcode verstehen und die, die es nicht tun ^^
  • GML-Quellcode

    1. if (x == room_width/2)
    2. {
    3. blinkPossible = true;
    4. }

    Verwende den vergleichsoperator "==" anstatt den zuweisungsoperator "=".

    zudem kannst mit show_debug_message() in der console outputs zu debugzwecken ausgeben um zu prüfen ob z.B: die variablen auch die korrekten werte haben und ob du überhaupt ins if-statement reinkommst.
    z.B:

    GML-Quellcode

    1. show_debug_message("X: "+string(x));
    2. show_debug_message("Width: "+string(room_width/2));
    3. if (x == room_width/2){
    4. blinkPossible = true;
    5. show_debug_message("Entered if statement");
    6. }


    /Edit:
    Hab vergessen zu erwähnen dass das if-statement

    GML-Quellcode

    1. if (x == room_width/2){

    nur true zurückliefert wenn x genau gleich room_width/2 ist (selbst kleine abweichungen im nachkommastellenbereich werden false zurückliefern.)
    je nachdem wie dein Spiel funktioniert müsstest du das evtl anpassen indem du z.B: ein wenig spielraum auf der x-achse lässt.

    GML-Quellcode

    1. if (x >= (room_width/2) - 10 && x <= (room_width/2 + 10)){ //wenn x in der mitte +- 10 pixel liegt


    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von LEWA ()

  • Hi, ich komm auch nicht immer klar damit, dass GM eigentlich immer mit Fließkommazahlen
    arbeitet und deshalb 5 nicht immer 5 sein muss, weil es z.B. 5,0000002 ist.

    Deshalb sieh Dir mal folgenden Befehl an:

    GML-Quellcode

    1. ​math_set_epsilon(toleranz)


    Als Standard ist der Wert beim Start auf 0,00 gesetzt, was Null Toleranz bedeutet und die Zahlen
    absolut ident sein müssen. Achtung, man kann nur Werte von 0 - 0,999999999 setzen, bei einer 1,
    gibt es einen Absturz.
    Wenn Du den "Fehler" bei obigem Vergleich mit der 5 nun abfangen möchtest, dann setzt Du die
    Toleranz auf 0,ooooo1(achte auf die Anzahl der Nullen) und schon ist auch für GM die 5 immer
    eine 5, wenn ein Vergleich statt findet.


    Miradur