April 15, 2023

Управление спрайтом. Тру вэй.

Top Down игры типа танчиков.

Проблема всех танчиков в мире в том что

управление ими происходит некорректно.

Держим вверх, паралельно нажимаем влево, что происходит ?

В разных играх по разному, но по факту чаще всего встречается вариант когда при вертикальном движении и нажатии влево спрайт поворачивается, а при горищонтальном движении и нажатии вверх, спрайт не поворачивается и не двигается вверх.

Это происходит потому что самым простым путем этот вопрос решается последовательной процеркой нажатия клавишь.. это самый энергодешевый способ и он естественно неправильный.

Тру вэй для таких игр это

Две проверки.

  1. координаты и повороты происходят однозначно при нажатии всего на одну их всех клавишь
  2. Второй алгоритм при зажатии двух клавишь LU LD RU RD
  3. При нажатии сразу 3 и больше клавишах, игнорировать последние нажатия или блокировать движение спрайта

Вторая проверка одновременно нажатых сочетаний клавишь LU LD RU RD работает так:

Мы должны хранить стэк нажатий если человек нажал влево, кладем в стэк "влево". Отжал убираем. Нажал влево, затем вверх, кладем "влево" "вверх"

Отжал сначала вверх, остался влево, идем влево, а если отжал влево, то мы удаляем из стэка влево, а вверх остается, и спрайт двигается вверх.

Нам бы не нужен был стэк, если бы у нас проверка была параллельной, но она последовательная, и каждая провека влияет на другую. А такого быть не надо бы.

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

Итого правильный код управления с резализацией стэка

Довольно крипово выглядит, но играется совершенно потрясающе.. 0 багов!

Простите, это код в microStudio

tanks (microstudio.io)