Servus Community,
für ein Sidescrolling Platformer benötige ich einen Charakter, dessen Sprite sich immer zu jeder Aktion die er grade tut verändert.
Bissher kann er nach Links und Rechts laufen, Springen und Fallen, halt der Standart.
Dieses ganze Movement habe ich mit einen Code im Step des Players geregelt. Das ganze schaut so aus :
Mit den Variablen welche hier verwendet werden werden den Charakter auch verschiedene Sprites zugewiesen.
Das Ganze läuft erneut über einen Code im Step des Players und schaut so aus :
so.. Mein Problem ist nun, das die Sprite in ihrer Animation immer im ersten Bild direkt hängen bleibt. Ich habe schon eine Vermutung , woran das liegen könnte, undzwar das die Aktion, die Sprite zu verändern immer wieder aufgerufen wird, da es sich im Stepevent befindet.
Wie genau könnte ich das umgehen?
LG Marvin159
EDIT//: Die Formatierung des Codes haut nicht richtig hin? Dafür gibts die Script nochmal fein und ordentlich als Textdatei im Anhang :).
für ein Sidescrolling Platformer benötige ich einen Charakter, dessen Sprite sich immer zu jeder Aktion die er grade tut verändert.
Bissher kann er nach Links und Rechts laufen, Springen und Fallen, halt der Standart.
Dieses ganze Movement habe ich mit einen Code im Step des Players geregelt. Das ganze schaut so aus :
GML-Quellcode
- image_speed = global.PlayerImageSpeed//Überprüft ob der Player Fällt oder grade Springtif vspeed < 0 { global.PlayerJumping = 1 global.PlayerFalling = 0 }
- if vspeed > 0 { global.PlayerJumping = 0 global.PlayerFalling = 1 }
- if speed = 0 { global.PlayerJumping = 0 global.PlayerFalling = 0 }
- //Ist der Player in der Luft?if place_free(x,y + 1) { gravity = 0.5 }else { gravity = 0.0 }
- if keyboard_check(ord('A')) and !keyboard_check(ord('D')) { if place_free(x - global.PlayerMoveSpeed,y) { //Der Spieler hält also A und nicht D gedrückt. global.PlayerIdleLeft = 0 global.PlayerIdleRight = 0 global.PlayerMoveLeft = 1 //Der Player rennt nach Links. global.PlayerMoveRight = 0 x -= global.PlayerMoveSpeed //Bewegt den Spieler in die angegebene Richtung. } else { global.PlayerIdleLeft = 1 //Links ist eine Wand? Bleib stehen und guck nach Links. global.PlayerIdleRight = 0 global.PlayerMoveLeft = 0 global.PlayerMoveRight = 0 } } if keyboard_check(ord('D')) and !keyboard_check(ord('A')) { if place_free(x + global.PlayerMoveSpeed,y) { //Der Spieler hält also A und nicht D gedrückt. global.PlayerIdleLeft = 0 global.PlayerIdleRight = 0 global.PlayerMoveLeft = 0 global.PlayerMoveRight = 1 //Der Player rennt nach Rechts. x += global.PlayerMoveSpeed //Bewegt den Spieler in die angegebene Richtung. } else { global.PlayerIdleLeft = 0 global.PlayerIdleRight = 1 //Rechts ist eine Wand? Bleib stehen und guck nach Rechts. global.PlayerMoveLeft = 0 global.PlayerMoveRight = 0 } } if keyboard_check(ord('D')) and keyboard_check(ord('A')) { global.PlayerIdleLeft = 0 global.PlayerIdleRight = 1 //Rechts ist eine Wand? Bleib stehen und guck nach Rechts. global.PlayerMoveLeft = 0 global.PlayerMoveRight = 0 }
- if keyboard_check_pressed(ord('W')){ if !place_free(x,y + 1) { vspeed = -global.PlayerJumpFirst } else if keyboard_check_pressed(ord('W')) && global.PlayerJumpTwice = 1 { global.PlayerJumpTwice = 0 vspeed = -global.PlayerJumpSecond }}
- if keyboard_check_released(ord('W')) // Checks if the player releases 'W'{ if vspeed < 0 // Checks if the player is about to jump in the air { vspeed /= 2 // Sets it so that depending on how long the player presses and releases 'W', that's how high the player jumps }}
Mit den Variablen welche hier verwendet werden werden den Charakter auch verschiedene Sprites zugewiesen.
Das Ganze läuft erneut über einen Code im Step des Players und schaut so aus :
GML-Quellcode
- if global.PlayerMoveLeft = 1 && global.PlayerMoveRight = 0 && global.PlayerIdleLeft = 0 && global.PlayerIdleRight = 0 && global.PlayerJumping = 0 && global.PlayerFalling = 0 { sprite_index = spr_player_runL image_speed = 3 }
- if global.PlayerMoveLeft = 0 && global.PlayerMoveRight = 1 && global.PlayerIdleLeft = 0 && global.PlayerIdleRight = 0 && global.PlayerJumping = 0 && global.PlayerFalling = 0 { sprite_index = spr_player_runR image_speed = 3 }
- if global.PlayerMoveLeft = 0 && global.PlayerMoveRight = 0 && global.PlayerIdleLeft = 1 && global.PlayerIdleRight = 0 && global.PlayerJumping = 0 && global.PlayerFalling = 0 { sprite_index = spr_player_idleL image_speed = 2 }
- if global.PlayerMoveLeft = 0 && global.PlayerMoveRight = 0 && global.PlayerIdleLeft = 0 && global.PlayerIdleRight = 1 && global.PlayerJumping = 0 && global.PlayerFalling = 0 { sprite_index = spr_player_idleR image_speed = 2 } if global.PlayerMoveLeft = 1 || global.PlayerIdleLeft = 1 { if global.PlayerJumping = 1 && global.PlayerFalling = 0
- { sprite_index = spr_player_jumpL image_speed = 2 } }
- if global.PlayerMoveRight = 1 || global.PlayerIdleRight = 1 { if global.PlayerJumping = 1 && global.PlayerFalling = 0
- { sprite_index = spr_player_jumpR image_speed = 2 } } if global.PlayerMoveLeft = 1 || global.PlayerIdleLeft = 1 { if global.PlayerFalling = 1 && global.PlayerJumping = 0
- { sprite_index = spr_player_fallL image_speed = 2 } }
- if global.PlayerMoveRight = 1 || global.PlayerIdleRight = 1 { if global.PlayerFalling = 1 && global.PlayerJumping = 0
- { sprite_index = spr_player_fallR image_speed = 2 } } if hspeed = 0 { if global.PlayerMoveRight = 1 { global.PlayerIdleRight = 1 global.PlayerMoveRight = 0 } else if global.PlayerMoveLeft = 1 { global.PlayerIdleLeft = 1 global.PlayerMoveLeft = 0 } }
so.. Mein Problem ist nun, das die Sprite in ihrer Animation immer im ersten Bild direkt hängen bleibt. Ich habe schon eine Vermutung , woran das liegen könnte, undzwar das die Aktion, die Sprite zu verändern immer wieder aufgerufen wird, da es sich im Stepevent befindet.
Wie genau könnte ich das umgehen?
LG Marvin159
EDIT//: Die Formatierung des Codes haut nicht richtig hin? Dafür gibts die Script nochmal fein und ordentlich als Textdatei im Anhang :).
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von Marvin159 ()