Если мы делаем шутер, то нужно отлавливать в первую очередь события MOUSEPRESSED, а не MOUSECLICKED. Иначе, если игрок быстро щелкает мышью, то эффект возникает странный. MOUSEPRESSED генерится на каждый щелчок, а MOUSECLICKED может вообще не сгенерироваться. Хотя по идее должно - с количеством нажатий. Подозреваю что там идет проверка чтобы нажатия были рядом, и если нет - многократный щелчок просто отбрасывается.
К слову сказать, нормальных двойных щелчков я тоже не наблюдал. Если делаешь нормальный двойной щелчок - идут два щелчка.
Так что вместо MOUSECLICKED - MOUSEPRESSED, а если же нам все таки нужен двойной щелчок, то реализуем его логику сами - ловим MOUSE_PRESSED, отслеживаем координаты и время между кликами, а дальше - если то что одинарный клик уже прошел для нас несущественно, то все легко и просто, а если существенно... Нужна некоторая задержка в обработке кликов. Проще всего сделать подсчет времени при рендеринге (все равно обработка мыши у нас там) и брать в дальнейшую обработку клики которые отлежались заданное время, в течение которого они могут превратиться в двойные клики... Уфф...
Обработка мышиных событий при рендеринге
Как меня угораздило? А жизнь заставила. Собственно сейчас (при работе в 2D) в этом большой необходимости нет, но этот кусок унаследован от предыдущего (3D) варианта... А там чтобы выяснить куда мы мышью попали, нужно было произвести некий танец с бубном вокруг gluUnProject. И танец этот нужно проводить там, где мы имеем доступ к текущим матрицам - уже полностью подготовленнным. Что возможно только при рендеринге.
Более того, если мы по событиям мыши передвигаем камеру и т.д. и т.п., то матрицы меняются и картинку желательно тут же перерисовать. Так что алгоритм выглядит примерно так
- Формируем матрицы
- Проверяем очередь событий мыши (а в стандартном обработчике мы их туда заталкиваем)
- Обрабатываем мышь, если есть что обрабатывать
- Если надо заново формируем матрицы
- теперь только рисуем
В 2D координаты отслеживаются тривиально, можно обойтись без этого, ну а если вдруг потом приспичит перейти на 3D?
P.S. Как же иногда задалбывают слишком "умные" программы. Ну зачем, скажите, ScribeFire упорно заменяет символ _ на выделение курсивом? Причем не везде, а выборочно?
P.P.S. Ну где бы найти хороший блог-клиент, чтобы все было удобно, без глюков и работало под Ubuntu?
Комментариев нет:
Отправить комментарий