Gamemaker ignoriert abfrage und führt Code aus.

  • GM 8

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

  • Gamemaker ignoriert abfrage und führt Code aus.

    Hallo Leute,

    neues Problem und ich hoffe es kann mir jemand helfen.
    Nun, ich hänge wieder an einem Turn Based Tactics (Strategy, Combat) was auch immer Spiel und habe jetzt ein kleines Problem.

    Undzwar klickt man eine Einheit an und es ploppen um ihn herum die Kästchen auf (Felder auf die diese Einheit nun gehen kann), aber wenn ich nun irgendwo auf das Feld (Gesamtfeld, Stage) klicke, bewegt sich die Einheit trotzdem dort hin, obwohl er garnicht die möglichkeit haben darf dort hin zu gehen, da es sein "Bewegungsradius" schon überschreitet.

    Hier ist der Code, wenn man auf ein Feld klickt:

    GML-Quellcode

    1. if mouse_check_button_pressed(mb_left) && visible = 1 && global.turned = 0
    2. {
    3. global.targetx = floor(mouse_x/32) //Das Ziel für die Einheit
    4. global.targety = floor(mouse_y/32)
    5. global.turned = 1 // Hier wird gesagt, dass die Einheit schon einen Zug gemacht hat.
    6. visible = 0 // und hier wird das Kästchen wieder unsichtbar.
    7. }


    man sieht, ich frage ab, obj ich die Maus betätige, ob das Kästechen sichtbar ist, und ob schon ein Zug gemacht wurde.
    Aber er scheint das visible einfach zu überspringen, da ich mich frei bewegen kann, auch auf unsichtbaren Feldern.

    Hier der Code der bestimmt, ob ein Kästchen Sichtbar ist, oder nicht:

    GML-Quellcode

    1. if distance <= max_distance && distance != 0 && global.turned = 0{ // distance = Distanz zur Einheit, max_distance = maximale distanze in Felder, z.B. 3.
    2. visible = 1
    3. }
    4. else {visible = 0;}


    Hier sehe ich keinen Fehler.

    Und hier die bewegung der Einheit:

    GML-Quellcode

    1. if global.targetx != -1 && global.targety != -1 // Ich frage ab, ob Ziel (x,y) nicht -1 sind
    2. {
    3. var path = path_add() // Path wird erstellt.
    4. mp_grid_path(global.grid,path,x+16,y+16,global.targetx*32+16,global.targety*32+16,0) // Path wird dem Grid angepasst
    5. path_start(path,argument0,0,0) // Path wird gestartet
    6. if hmove = 1 // unwichtige Variable, sorgt nur für eine Abfrage der Bewegung.
    7. move = 1 // Ebenfalls unwichtig.
    8. if point_in_circle(x,y,global.targetx*32,global.targety*32,argument0) // hier wird gecheckt, ob er sein Ziel erreicht hat.
    9. {
    10. global.turnid = 0 // Die Instanze ID, der aktuellen Einheit wird auf 0 gesetzt
    11. path_delete(path) // Path wird gelöscht
    12. move_snap(32,32) // Einheit wird dem Grid angepasst
    13. global.targetx = -1 // Ziel wird zurück auf -1 gesetzt.
    14. global.targety = -1
    15. global.turned = 0 // Ignorieren, das ist nur da, damit ich die Einheit immer bewegen kann, wenn sie fertig ist mit dem Zug.
    16. if hmove = 1
    17. move = 0
    18. }
    19. }
    Alles anzeigen


    Ich sehe niergends einen Fehler, ich hoffe ihr könnt mir helfen.
    Ich habe auch nochmal alles für euch komemntiert.

    Nochmals der Fehler: Visible wird nicht abgefragt.

    Ich habe es auch schon mit einer anderen Variable versucht.

    Ja, dann warte ich mal ^^

    -Nils
  • Nun, im Debugger, wird visible nicht einmal angezeigt, komisch.
    Es werden dennoch alle außerhalb des Radius nicht angezeigt (visible = 0)

    hmmm.

    EDIT: ICH HABE DAS PROBLEM SELBER GELÖST ;)

    -Nils

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

  • Kleiner Tipp:

    Verwende bei Vergleichen immer "==" und klammere das ganze Comparison ein, also so:

    GML-Quellcode

    1. if (pause == false && alive == true) {}


    Auch wenn's in GML mit nur einem "=" funktioniert, es ist recht unsicher und kann nach hinten losgehen.
    Normalerweise wird in dieser Art von Syntax (C++, php, C, usw) ein einzelnes "=" nur zum setzen einer Variable verwendet, aber nie zum vergleich.
    Dazu gibt's oben drauf noch "===", als typensicheren Vergleich (den kenn ich aber bis jetzt nur aus php)
    Dieser Beitrag wurde bereits 8.675.628 mal editiert, zuletzt von »levarris07« (Heute, 11:33)
  • Benutzer online 1

    1 Besucher