Steuerung mit Variabeln funktioniert nicht. (GM:S)

  • GM 8

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

  • Steuerung mit Variabeln funktioniert nicht. (GM:S)

    Moin,

    habe heute mal meinen kompletten Movement-Code umgeändert und statt dieser "if keyboard_check..."-Methode, die ich vorher bei jeder Bewegung (sprich: Links, rechts, Sprung, etc.), verwende ich jetzt ein, durch Variabeln gesteuertes Movement-System. Hier mal schnell die Codes:

    Alles im Step-Event:

    GML-Quellcode

    1. //Set Input-Variables
    2. if global.input = 0
    3. {
    4. if keyboard_check(ord('W')) {key_up = true}
    5. if keyboard_check(ord('S')) {key_down = true}
    6. if keyboard_check(ord('D')) {key_right = true}
    7. if keyboard_check(ord('A')) {key_left = true}
    8. if keyboard_check_pressed(vk_space) {key_jump = true}
    9. if keyboard_check(ord('F')) {key_fire = true}
    10. if keyboard_check_released(ord('D')) {key_fire = false; key_right_released = true}
    11. if keyboard_check_released(ord('A')) {key_left = false; key_left_released = true}
    12. if keyboard_check_released(vk_space) {key_left = false; key_jump_released = true}
    13. if keyboard_check_released(ord('F')) {key_left = false; key_fire_released = true}
    14. }
    Alles anzeigen


    Einfach die Sprite-Namen bitte ignorieren:

    GML-Quellcode

    1. //Set Sprite-Changings
    2. if eddie_stand = true {sprite_index = Wictor}
    3. if eddie_stand_left = true {sprite_index = Wictor_left}
    4. if eddie_walk = true {sprite_index = Wictor_Running}
    5. if eddie_walk_left = true {sprite_index = Wictor_Running_left}
    6. if eddie_climb = true {sprite_index = Wictor_Climb}
    7. if eddie_shoot = true {sprite_index = Wictor_shooting}
    8. if eddie_shoot_left = true {sprite_index = Wictor_shooting_left}


    Und nun hier noch zwei Beispiele wie ich es verwendet habe:

    GML-Quellcode

    1. hspeed = 0; //Movement Left-Right
    2. if (key_left = true && grounded = true) //Move Left
    3. {hspeed -= 5 && eddie_walk_left = true}
    4. if (key_right && grounded = true) //Move Right
    5. {hspeed = 5 && eddie_walk = true}
    6. if (key_right_released = true) {hspeed = 0 && eddie_stand = true}
    7. if (key_left_released = true){hspeed = 0 && eddie_stand_left = true}


    GML-Quellcode

    1. if (key_jump = true) //Jumpmovement
    2. {
    3. if place_free (x,y+5) == false
    4. vspeed -= 7
    5. image_speed = 0
    6. grounded = false
    7. }
    8. if place_free (x+hspeed,y+vspeed) == false {hspeed = 0}
    9. if (key_jump_released = true) {grounded = true}
    10. if vspeed > 0
    11. vspeed /= 2
    12. if vspeed>10
    13. move_contact_solid(direction,12);
    Alles anzeigen


    Mein Problem hier ist jetzt, dass ich überhaupt nichts machen kann. Das einzige was passiert ist, dass ich springen kann wenn ich auf die Space-Taste drücke, aber dann hört der Spieler auch nicht auf zu springen. Sitze jetzt gute zwei Tage an dem Problem und habe es noch immer nicht gelöst bekommen. :(
    Hoffe mit kann von euch jemand helfen.

    Liebe Grüße,
    Max/ChinoDX

    ROBOT REVOLUTION - Jetzt in Entwicklung!
  • Hi,

    hier sind Fehler drin:

    GML-Quellcode

    1. if keyboard_check_released(ord('D')) {key_fire = false; key_right_released = true}
    2. if keyboard_check_released(ord('A')) {key_left = false; key_left_released = true}
    3. if keyboard_check_released(vk_space) {key_left = false; key_jump_released = true}
    4. if keyboard_check_released(ord('F')) {key_left = false; key_fire_released = true}
    5. }


    sollte eher heißen:

    GML-Quellcode

    1. if keyboard_check_released(ord('D')) {key_right = false; key_right_released = true}
    2. if keyboard_check_released(ord('A')) {key_left = false; key_left_released = true}
    3. if keyboard_check_released(vk_space) {key_jump = false; key_jump_released = true}
    4. if keyboard_check_released(ord('F')) {key_fire = false; key_fire_released = true}
    5. }


    Wobei ich den sinn darin nicht verstehe:

    GML-Quellcode

    1. //Set Input-Variables
    2. if global.input = 0
    3. {
    4. if keyboard_check(ord('W')) {key_up = true}
    5. else key_up = false
    6. if keyboard_check(ord('S')) {key_down = true}
    7. else key_down = false
    8. if keyboard_check(ord('D')) {key_right = true}
    9. else key_right = false
    10. if keyboard_check(ord('A')) {key_left = true}
    11. else key_left = false
    12. if keyboard_check_pressed(vk_space) {key_jump = true}
    13. else key_jump = false
    14. if keyboard_check(ord('F')) {key_fire = true}
    15. else key_fire = false
    Alles anzeigen


    in deinem 2. Code snipped willst die Variablen abfragen und nicht setzen, also 2x=:

    GML-Quellcode

    1. //Set Sprite-Changings
    2. if eddie_stand == true {sprite_index = Wictor}
    3. if eddie_stand_left == true {sprite_index = Wictor_left}
    4. if eddie_walk == true {sprite_index = Wictor_Running}
    5. if eddie_walk_left == true {sprite_index = Wictor_Running_left}
    6. if eddie_climb == true {sprite_index = Wictor_Climb}
    7. if eddie_shoot == true {sprite_index = Wictor_shooting}
    8. if eddie_shoot_left == true {sprite_index = Wictor_shooting_left}


    und in deinem 3. gehst du sehr ruppig mit geschweiften klammern um ;( habs mal korrigiert:
    (Komentare bei grounded hinzugefügt)

    GML-Quellcode

    1. if (key_jump == true) //Jumpmovement
    2. {
    3. if place_free (x,y+5) == false
    4. {
    5. vspeed -= 7
    6. image_speed = 0
    7. grounded = false
    8. }
    9. }
    10. if place_free (x+hspeed,y+vspeed) == false {hspeed = 0}
    11. if (key_jump_released == true) {grounded = true} //würde heißen sobald sprung losgelassen stehst am boden, glaube nicht das du das willst.
    12. if (vspeed > 0) {vspeed /= 2}
    13. if vspeed>10 {move_contact_solid(direction,12)} //hier würde das grounded mehr sinn machen denke ich
    Alles anzeigen


    hoffe das hilft dir etwas :rolleyes:

    Gruß Bartl
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort

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

  • @Bartley:

    Mannoman, da sind mir ja echt einige peinliche Fehler untergekommen. :D
    Soweit hat das auch geholfen, dass eigentliche Problem war aber eher diese Zeile:

    GML-Quellcode

    1. if (key_left = true && grounded = true) //Move Left
    2. {hspeed -= 5 && eddie_walk_left = true}


    In der zweiten Zeile war das "&&" falsch gewesen. :P

    Aber trotzdem habe ich jetzt noch ein Problem:
    Wenn ich mich jetzt in eine Richtung bewege und die Taste loslasse, gefriert der Sprite und ich kann mich überhaupt nicht mehr bewegen...
    Bräuchte also möglciherweise doch nochmal Hilfe, aber trotzdem schonmal danke für deine Verbesserungen. :)

    Liebe Grüße,
    Max/ChinoDX

    ROBOT REVOLUTION - Jetzt in Entwicklung!
  • Liegt das vielleicht daran, dass du

    GML-Quellcode

    1. key_XXX_released = true

    nicht mehr zurück setzt?

    Denn:

    GML-Quellcode

    1. if (key_right_released = true) {hspeed = 0 && eddie_stand = true}
    2. if (key_left_released = true){hspeed = 0 && eddie_stand_left = true}


    solltest vielleicht noch das hinzufügen:

    GML-Quellcode

    1. if keyboard_check(ord('A')) {key_left = true; key_left_released = false}
    2. if keyboard_check(ord('D')) {key_right = true; key_right_released = false}
    :whistling:

    Gruß Bartl
    Drei Arten von Männern versagen im Verstehen der Frauen:
    junge Männer, Männer mittleren Alters und alte Männer.

    irisches Sprichwort
  • Hat leider immer noch nichts gebracht.

    Ich fasse trotzdem nochmal das ganze Problem zusammen:
    Wenn ich nach rechts gehe und die Taste loslasse, friert der Sprite mitten in der Animation ein. Wenn ich nun nach links gehen will, dann dreht er sich zwar nach links, bewegt sich jedoch nicht mehr. Und ab diesem Zeitpunkt kann ich gar nichts mehr machen. Ausserdem gibt es auch immernoch ein Problem mit dem Springen, denn sobald ich springe, kann ich wieder nichts mehr machen und ausserdem springt die Figur immer weiter.

    Trotzdem danke an dich Bartl für deine tolle Hilfe. :)

    ROBOT REVOLUTION - Jetzt in Entwicklung!