sin45 = 0.7071; // константа для угла
/// ...
// определение 0\+1\-1 "вектора" кнопок:
keyX = keyboard_check(vk_right) - keyboard_check(vk_left);
keyY = keyboard_check(vk_down) - keyboard_check(vk_up);
// присваиваем это собственно вектору движения
// (тут еще можно умножить на скорость передвижения):
velX = keyX;
velY = keyY;
// если движение по диагонали, то умножаем на константу
// зачем тут нормализация...
if (keyX != 0 && keyY != 0) {
velX *= sin45
velY *= sin45
}
// теперь velX, velY хранят значения "вектора" движения.
Вроде бы все хорошо. Никаких хранений направлений или потерь длины вектора (особенно если задавать константу большей точности)
__________________
Мой сайт-блог. Игры, обновления, примеры для Haxe, JavaScript(+HTML5), GameMaker, Love2d...