@Yurenty
In Gamedev we trust

Как сделать так, чтобы скорость по диагонали не складывалась?

Здравствуйте! Сделал элементарный код для движения персонажа, но скорость у него складывается при движении по диагонали, не могу придумать как сделать так чтобы этого избежать. Вот код:
var x_input = keyboard_check(ord("D")) - keyboard_check(ord("A"));
var y_input = keyboard_check(ord("S")) - keyboard_check(ord("W"));

move_and_collide(x_input * global.spd, y_input * global.spd, Obj_collision);


Попробовал потом таким способом, из интырнета, но там почему-то спрайт персонажа дергается при диагональном движении....

var left = keyboard_check(ord("A"));
var right = keyboard_check(ord("D"));
var up = keyboard_check(ord("W"));
var down = keyboard_check(ord("S"));

// Скорость движения
// Создаем переменную скорости движения moveSp

var moveSp = (left or right or up or down) * global.spd;// Вместо 3 можно поставить свою скорость

// Направления по Горизонтали и Вертикали

var horizontalDir = (right - left);
var verticalDir = (down - up);

// Направление движения

// Создаем переменную dir для направления движения

var dir = point_direction(0,0,horizontalDir,verticalDir);

// Вычисление движения по осям X и Y

// Создаем переменные X и Y
var X = lengthdir_x(moveSp,dir);
var Y = lengthdir_y(moveSp,dir);

move_and_collide(X,Y,Obj_collision);
  • Вопрос задан
  • 130 просмотров
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Найти вектор движения, нормировать к единице, умножить на скорость.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы