|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.06.2012, 14:17 | #1 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Подвисание игры при нажатии клавиш управления
Приветствую всех форумчан. Случилась такая неприятная ситуация. Начал делать игрушку. В ходе создания появилась проблема. В общем юнит(в данном случае танк) управляется не очень замысловатыми клавишами. Обычно у геймеров они стерты и продавлены(и не такое видел!). Это клавиши w,s,a,d. W и S заставляют двигаться танк вперед или назад параллельно направлению движения. A и D меняют направление движения(заставляют танк вращаться). Есть код обработки нажатий клавиш.
Цитата:
Заранее спасибо. P.S. в WinXP игра выбивает ошибку. Какую - я не знаю. Прошу сообщить. ADD Забыл сказать, что если копировать в процедуру рисования еще и Sleep(20) ничего не меняется. Все нормально работает. Последний раз редактировалось _PROGRAMM_; 02.06.2012 в 14:27. |
|
02.06.2012, 15:47 | #2 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Код:
Изобретатель велосипедов
|
02.06.2012, 16:11 | #3 | |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
до Код:
Код:
Последний раз редактировалось _PROGRAMM_; 02.06.2012 в 16:13. |
|
02.06.2012, 16:35 | #4 |
Форумчанин
Регистрация: 21.01.2009
Сообщений: 719
|
Ээээ... Это совсем что-то не то: у вас перед этим циклом объявлена неинициализированная переменная
Код:
Вы зачем убрали "if (PeekMessage(&message,NULL,NULL,0,P M_REMOVE))"? я имел в виду поменять в этой строчке if на while
Изобретатель велосипедов
Последний раз редактировалось Selestis; 02.06.2012 в 16:37. |
02.06.2012, 18:58 | #5 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Код:
|
03.06.2012, 04:25 | #6 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Код:
|
03.06.2012, 14:01 | #7 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Что-то я не пойму в чем все-таки проблема. Еще разок. Я хочу, чтобы в потоке находился обработчик кнопок(он у меня там и находится). Но при этом начинаются притормаживания. Если его поместить в процедуру перерисовки все работает нормально. Почему так? Просто списывать код не нравится.
Во вложениях результат переделанного кода. Как вычисляется deltaTime я посмотрю. Но все равно не понимаю, что делаю. Последний раз редактировалось _PROGRAMM_; 03.06.2012 в 14:04. |
16.06.2012, 19:03 | #8 |
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Не могу я просто так оставить эту тему. Она мне спать спокойно не дает. Ответьте, пожалуйста, на предыдущий вопрос и на новые.
Для чего в цикле нужен Sleep(1)(Пост №6). Наблюдаю следующее явление. Чем дольше держишь нажатой кнопку управления, тем дольше после того, как ее отпустишь, происходит самовольное движение объекта(в моем случае танка). Почему? Если не менять if на while, как советовали в посте №2, таких зависаний не наблюдается. |
16.06.2012, 21:22 | #9 | |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,690
|
Sleep(1) или Sleep(0) нужны чтобы ваша игра не скушала 100% процессорного времени.
Во вторых нужно представлять как винда передает сообщения приложениям, какие сообщения помещаются в очередь, а какие нет. Например сообщения от таймера не копятся в очереди, и есть вероятность пропустить его тики, пока работает обработчик текущего тика. А вот сообщения от клавиатуры накапливаются в очереди, поэтому если обработчик работает долго, то после отпускания клавиши, сообщения о ее нажатии будут приходить, пока не кончатся. Код приведенный в посте #5. Цикл просмотра сообщений, если таковые имеются while (PeekMessage(&message,NULL,NULL,0,P M_REMOVE)) Естественно если сообщений нет, то цикл ни разу не выполнится. TranslateMessage(&message); Вы уверенны что вам это нужно? Цитата:
Вот думаю и все. Дальше гугл в помощь |
|
17.06.2012, 11:01 | #10 | ||
Участник клуба
Регистрация: 30.07.2009
Сообщений: 1,601
|
Цитата:
Цитата:
|
||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Замена клавиш в чужом приложении при нажатии | Ecosasha | Win Api | 4 | 25.12.2011 14:07 |
Как сделать чтобы программа не закрывалась при нажатии клавиш alt+f4 (Delphi) | zig1 | Помощь студентам | 1 | 12.12.2011 06:18 |
при нажатии цифр поменять значение буквенных клавиш местами(Assembler) | lexa123 | Помощь студентам | 1 | 16.12.2010 20:29 |
программа, выводящая сообщения о нажатии клавиш мыши | Pljus1 | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 29.11.2010 04:49 |
Open GL. при нажатии клавиш Left, Ridth, Up и Down точка должна двигаться по форме | Roof | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 27 | 16.11.2007 01:33 |