Are you using a collision event? If so, that is the problem itself. When a collision event is called, the object is placed at the position it was at just before the collision.
Instead, to check for collision, you'd want to do a conditional check within the step event like
if !place_free(x + hspeed, y + vspeed)
{
//Collision code here.
}