Все переменные в событии Create
xDir = 0;
stepLength = 0;
dx = 0;
gravitation = 1.1;
jumpImpulse = -20
dy = 0;
onGround = false;
firststep=0
image_speed=0
maxstep=10
bublik = 0
Код для события Step, вот тут я распишу по-подробнее
xDir = -(keyboard_check(ord("A")) || keyboard_check(vk_left)) + (keyboard_check(ord("D")) || keyboard_check(vk_right)) //Это одна строчка. xDir определяет строну движения влево или вправо.
if xDir>0 // бублик нам оставляет нужную сторону движения, когда xDir будет равен 0
{
bublik = 1
}
if xDir<0
{
bublik = -1
}
if xDir !=0{
dx = xDir * stepLength; // Движения при нажатых клавишах
}
else
{
dx = stepLength * bublik // Торможение
}
if (!place_meeting(x + dx, y, oSolid)) //Это пока не трогать, это прыжок и столкновение со стеной
x += dx;
else
while (!place_meeting(x + sign(dx), y, oSolid))
x += sign(dx);
if (onGround)
if (keyboard_check(vk_space)) || keyboard_check(vk_shift)
dy = jumpImpulse;
if (!place_meeting(x, y + dy, oSolid))
y += dy;
else
{
while (!place_meeting(x, y + sign(dy), oSolid))
y += sign(dy);
dy = 0;
}
dy += gravitation;
onGround = place_meeting(x, y + 1, oSolid);
if xDir != 0
{
stepLength+=0.3 //Разгон(настраивается)
if stepLength>maxstep
{
stepLength = maxstep // максимальный разгон
}
if firststep=0
{
if xDir>0
{
image_index = 1
}
if xDir<0
{
image_index = 3
}
firststep=1
}
}
if xDir = 0
{
stepLength-=0.4 //Торможение
if stepLength < 0
{
stepLength = 0 // Чтобы торможение не ушло в минус
}
firststep=0 //Первый моментальный шаг анимации
}
if stepLength !=0
{
image_speed = 1 //Стандартная скорость анимации при ходьбе
}
else
{
image_index = 0 // Когда игрок полностью затормозит, кадр анимации сменится на бездействие
if image_index = 0
{
image_speed = 0 // остановка анимации, при кадре бездействия
}
}
1 comment