Способ реализации:
Lua
Версия Warcraft:
Наработка превращает нажатия клавиш W, A, S, D, Ctrl, Space в нормированный Vector3, который можно сразу применять к юниту.
  • Нормализация позволяет обезопасить управление от всех этих страйфов и распрыжек, равномерно направляя юнита в любую из комбинаций сторон.
  • Для удобства использует EventDispatcher, тем самым подключаться к ней можно буквально в GUI.
  • Сама регистрирует на всех игроков-людей.
  • Можно задавать свой набор клавиш.

Демо

Установка

Использование

local EventDispatcher = Imp.import(EventDispatcher)

EventDispatcher.on("input.movement", function(event)
    -- Игрок, нажавший клавишу
    event.data.player

    -- Vector3 норм. вектор назначения
    event.data.destination
    
    -- Vector3 норм. вектор текущей нажатой/отжатой клавиши (напр., для прыжков)
    event.data.rawVector
    
    -- string айди клавиши
    event.data.keyId
end)

Свой набор клавиш

Можно задать свой набор клавиш, вызвав InputMovement.changeKeyMap() после срабатывания 0.01 таймера игрового времени.
local InputMovement = Imp.import(InputMovement)

InputMovement.changeKeyMap({
    FORWARD = OSKEY_W,
    BACKWARD = OSKEY_S,
    LEFT = OSKEY_A,
    RIGHT = OSKEY_D,
    UP = OSKEY_SPACE,
    DOWN = OSKEY_LCONTROL
})
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
2
Круто! Только при отдельном нажатии Ctrl или Space - юнит всегда поворачивается на право...
34
А как ты обошел проблему с паузой игры?
Это когда нажимаешь к примеру W, потом ходишь в меню, игра ставится на паузу, потом отпускаешь клавишу, выходишь из меню и игра продолжает думать что W нажата. Ну там понятно что игра не отправляет в триггеры событие "клавиша отпушена" во время паузы.
38
Никак, это не проблема системы. Можно повторно кликнуть W и она отпустится.
Близзы пофиксят со временем
25
ScorpioT1000:
Близзы пофиксят со временем
Вот бы так со всеми проблемами, как в наших влажных мечтах, эх.
А система норм, полезная штука
38
Можно повторно кликнуть W и она отпустится
Из-за этого, кстати, пришлось хранить вектора всех клавиш и каждый раз их суммировать вместо добавления/вычитания с каждым нажатием. Т.к. что-то может не пойматься

Я, кстати, знаю, как отловить выход из паузы, так что надо попробовать добавить фикс
34
Я, кстати, знаю, как отловить выход из паузы, так что надо попробовать добавить фикс
даже если отловишь, ничего не изменится. Ты сможешь только программно сбросить вектора в 0.
При этом у меня всё ещё может быть нажата клавиша W при выходе из паузы.
Если её отпустить, вектор будет минусовой, а если потом нажать то 0.
В таком кейсе вообще положительный никак не сделать, кроме манимуляции с паузой.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.