![]() |
Про клавиши
Подскажите как быть.
При сочетании клавиш в BlitzMax (да и в B3D тоже) происходит неприятная, но очевидная вещь. Допусти мы нажимаем W+D. Так вот, при опускании этих клавиш BlitzMax ловит последнюю нажатую клавишу и делает гадость. После движения "наискосок" герой игры встает по стойке в направлении кратном 90 градусам, 45 никак. Как быть? Все клавиши забил в переменные и использую суммы для проверки на кол-во клавиш и сверяюсь только с переменными при действиях... |
Ответ: Про клавиши
Randomize
что-то туплю, ты keyhit для движения используешь чтоли ? юзай keydown |
Ответ: Про клавиши
На добром слове спасибо конешно, но я нетакой... эм... любитель потыкать)
Приведу сорец чтоли... Код:
'_input buttons |
Ответ: Про клавиши
Вот эта строчка потенциальный источник ошибок:
Local mbUP% = KeyDown(KEY_UP) + KeyDown(KEY_W) В некотором случае возможно получения значения 2 А далее по коду, о чудо, мы и нарываемся на ошибку: If (mbUP+mbDown+mbLeft+mbRight)=2 здесь автор хотел видимо проверять нажатие сразу 2х кнопок для диагонального движения. Однако выше приведённый код способен генерировать значение 2 в одной переменной, что при нажатии ещё одной кнопки даст сумму больше 2х, т.е. 3 или даже 4! (хотя теоритический максимум 8). Не уверен что это решит проблему, однако хуже не будет если сделать правильно. |
Ответ: Про клавиши
Цитата:
Условие продумано и не ошибочно. Т.к. KeyDown возвращает булевые значения. Тоесть числа. |
Ответ: Про клавиши
Булевые значения это булевые значения, а числа это числа. Не надо мешать всё в одну кучу. Если блитз3д не делает между ними различий не значит что это правильно.
Складывая 2 булевых значения в блитз3д ты получаешь уже число а не булев. В первой приведённой мной строке диапазон значений mbUP% равен [0..2], вместо ожидаемых тобой [0..1]. Далее ты по коду складываешь 4е аналогично полученных переменных и ожидаешьчто диапазон значений будет [0...2]. Об этом говорит условие равенства 2м. Однако сложение 4х потенциальных 2ек датёт диапазон значений [0..8], Кстати даже еслибы ты в первой приведённой мной строке решил проблему увеличения диапазона значений до 2х, то в строке: If (mbUP+mbDown+mbLeft+mbRight)=2 диапазон всёравно бы был [0..4], что опять таки твой алгоритм неучитывает. Можно конешно строго натсрого запретить нажимать пользователю альтернативные клавиши управления. |
Ответ: Про клавиши
Фуф...
Так и задумано вобщето. Управление только стрелками и wasd. Больше двух клавиш одновременно нажимать не надо. А даже если нажать, то ничего смертельного не произойдёт. Вернее ничего не произойдёт. Вопрос то в том как быть. При резком отпускании двух зажатых клавиш какаято из них отпускается последней и в конце мы имеем не ту картину (как я писал в первом посте). зы. я прекрасно знаю что такое тип Boolean. Но в блице его как такового нету. Строка y=(x=(1+100)^(46=75)) вполне справедлива. Также как и 1*Flip() тоже нормально. Прямой результат метаморфозы Boolean`a в Integer, а True и False в константы. Хотя это уже другая история... В прочем ладно. Я понял как всё можно обойти. |
Ответ: Про клавиши
Цитата:
|
Часовой пояс GMT +4, время: 05:53. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot