Управление спрайтом. Тру вэй.
Проблема всех танчиков в мире в том что
управление ими происходит некорректно.
Держим вверх, паралельно нажимаем влево, что происходит ?
В разных играх по разному, но по факту чаще всего встречается вариант когда при вертикальном движении и нажатии влево спрайт поворачивается, а при горищонтальном движении и нажатии вверх, спрайт не поворачивается и не двигается вверх.
Это происходит потому что самым простым путем этот вопрос решается последовательной процеркой нажатия клавишь.. это самый энергодешевый способ и он естественно неправильный.
- координаты и повороты происходят однозначно при нажатии всего на одну их всех клавишь
- Второй алгоритм при зажатии двух клавишь LU LD RU RD
- При нажатии сразу 3 и больше клавишах, игнорировать последние нажатия или блокировать движение спрайта
Вторая проверка одновременно нажатых сочетаний клавишь LU LD RU RD работает так:
Мы должны хранить стэк нажатий если человек нажал влево, кладем в стэк "влево". Отжал убираем. Нажал влево, затем вверх, кладем "влево" "вверх"
Отжал сначала вверх, остался влево, идем влево, а если отжал влево, то мы удаляем из стэка влево, а вверх остается, и спрайт двигается вверх.
Нам бы не нужен был стэк, если бы у нас проверка была параллельной, но она последовательная, и каждая провека влияет на другую. А такого быть не надо бы.
Но т.к. мы не можем организовать честную паралельную проверку нажатий, мы проверяем нажатия последовательно, но при этом строим стэк.
Итого правильный код управления с резализацией стэка
Довольно крипово выглядит, но играется совершенно потрясающе.. 0 багов!