• Hey Guest! Ever feel like entering a Game Jam, but the time limit is always too much pressure? We get it... You lead a hectic life and dedicating 3 whole days to make a game just doesn't work for you! So, why not enter the GMC SLOW JAM? Take your time! Kick back and make your game over 4 months! Interested? Then just click here!

GML Object Stuck After Idle Animation - Can't move unless I jump

M

Matthew Thibodeau

Guest
The movement in the game I'm working on appears to be bugged. It will not let me move right or left unless I've jumped first. If I start moving, I can keep moving, though sometimes changing the direction makes it stuck too. Jumping works good and as intended, its just sometimes the movement doesn't work as seamlessly as it should.

All my code was taking from Shaun Spaulding's tutorials, so I'm not sure what's wrong with it.

All sprites used in the object are set to Center, precise collision checking is turned off, and they are all the same size. I have no collision masks though I'm not sure if that's even related to this. This seems like something wrong with the movement coding.

Here is my Create Event:
///Initialize Variables
Code:
grav = 0.2;
hsp = 0;
vsp = 0;
jumpspeed = 7;
movespeed = 4;
image_speed = 0.25;

Here is my Step Event:

Code:
key_right = keyboard_check(vk_right);
key_left = -keyboard_check(vk_left);
key_jump = keyboard_check_pressed(vk_space);
//React to inputs
move = key_left + key_right;
hsp = move * movespeed;
if (vsp < 10) vsp += grav;
if (place_meeting(x,y+1,obj_sand))
{
    vsp = key_jump * -jumpspeed
}
//Horizontal Collision
if (place_meeting(x+hsp,y,obj_sand))
{
    while(!place_meeting(x+sign(hsp),y,obj_sand))
    {
        x += sign(hsp);
    }
    hsp = 0;
}
x += hsp;
//Vertical Collision
if (place_meeting(x,y+vsp,obj_sand))
{
    while(!place_meeting(x,y+sign(vsp),obj_sand))
    {
        y += sign(vsp);
    }
    vsp = 0;
}
y += vsp;
//Animate
if (move != 0) image_xscale = move;
if (place_meeting(x, y+1, obj_sand)) {
    if (move!=0) sprite_index = sponge_run_right; else sprite_index = sponge_idle_right;
    }
else
{
    if (vsp < 0) sprite_index = sponge_jump_right; else sprite_index = sponge_fall_right;
    }
 
Top