|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
Движение объекта, управление стрелками. Перестает работать при нажатии любой клавиши02.05.2009, 19:05. Показов 15989. Ответов 17
Метки нет (Все метки)
Здравствуйте.
Пишу игру в танчики. Borland C++ 3.1 1. Сейчас реализовал само движение объекта с помощью стрелок. Проблема в том, что когда я жму на одну из клавиш управления (влево например), объект перемещается нормально. Но как только я нажму любую клавишу на клавиатуре, то движение прекращается. Не могу понять в чем проблема и как исправить. 2. При начале движения, первый шаг рисуется нормально, потом возникает задержка и начинается нормальное движение. Как убрать эту задержку и от чего она вообще возникает? Если нужен исходный код, я обязательно выложу. Спасибо.
0
|
|
| 02.05.2009, 19:05 | |
|
Ответы с готовыми решениями:
17
Движение объекта при нажатии какой-либо клавиши связать с таймером Движение объекта (квадрата) по экрану, управление клавишами-стрелками и WASD Lenovo b575e - Перестает работать тачпад после нажатия любой клавиши на клавиатуре |
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 02.05.2009, 20:42 | |
|
исходный код необходим!
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
||||||
| 02.05.2009, 23:17 [ТС] | ||||||
0
|
||||||
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 03.05.2009, 10:25 | |
|
1. проблема не наблюдается.
2. это изза использования фнкции getch http://www.codenet.ru/progr/cpp/spru/getch.php . то есть все читается с консоли, а в нее пишет клавиатура. то есть задержка из-за такой работы клавиатуры(1 символ-задержка-многократный повтор печатания символа).
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|||
| 03.05.2009, 10:32 [ТС] | |||
|
Насчет getch() не понял что нет так.. Первый раз считываю код клавиши и если считан 0, то нажата спец. клавиша и читаем еще раз для получения scan-кода. Добавлено через 3 минуты 18 секунд 2. Я и bioskey() использовал, задержка тоже есть...
0
|
|||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 03.05.2009, 10:59 | |
|
w1zard, простите, что вмешиваюсь, но radiohobbyt, правильно написал.
getch() фиксирует СИМВОЛ, а не НАЖАТИЕ на клавишу. разница в том, что СИМВОЛ "ОС Винды" определяет после того как клавишу ОТПУСТИЛИ, либо нажали, и прошла ЗАДЕРЖКА на повтор, установленная в системных настройках.Вот и ваша пауза. ![]() используйте другой метод.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
| 03.05.2009, 11:12 [ТС] | |
|
Patch, спасибо за разъяснение
![]() Но, я стал использовать getch() только потому, что bioskey(0) тоже не работало. Всмысле работало точно также как сейчас работает getch(). А какой метод мне использовать? Мне больше ничего пока не известно ![]() PS: без использования функций win api нужно.
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 03.05.2009, 11:46 | |
|
Насколько я понял, bioskey использует прерывания...
на WinXP, Vista и старше это работать не будет: Винды не дают программам доступа к прерываниям. а почему нельзя использовать WinAPI? вы наивно полагаете, что getch() работает без него?
0
|
|
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 03.05.2009, 11:56 | |
|
э....хороший вопрос...используется борланд с++ 3.1...это вообще мсдос...=)
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
||||
| 03.05.2009, 12:03 [ТС] | ||||
Да, bioskey использует прерывания, тогда и она отпадает, так и постает вопрос:
а все-таки, по первому пункту, прочитайте мое сообщение: https://www.cyberforum.ru/post152062.html
0
|
||||
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 03.05.2009, 12:04 | |
|
Из под Винды дос-программу в обход Виндов запустить вообще-то нельзя. Будет эмуляция. Кстати, возможно, и из-за этого лаги и идут.
Как вариант, можно попытаться запустить в режиме совместимости с Win95/98. И есть там еще дополнительные текстовые службы... проверте.
0
|
|
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 03.05.2009, 12:15 | |
|
осталась одна нехорошая мысль...работать с клавиатурой напрямую...см. например "ПРограммирование аппаратных средств в Windows" В. Несвижский. я такого не делал...но работать должно.
на на тему того, что не работает у вас, но работает у меня...так это после нажатия пробела, не отпуская стрелок(попробуйте нажать любую клавишу, потом нажать вторую и отпустить). еще раз прочитайте, что делает getch(), он берет символ из консоли, не отображая его. так оно и должно работать, как оно и работает. хоть что за ось, под которой это запускается? не пишется под которую(дос), а под которой запускается?
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 03.05.2009, 12:20 | |
|
Нет, работать напрямую с клавой не получится.
Если, конечно, не написать системный драйвер, а для этого... и опять-же он будет под Винды. Вся остальная работа - только эмуляция.
0
|
|
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 03.05.2009, 12:23 | |
|
ну...если все это работает под мсдосом(или 98), то я думаю, что получится.
0
|
|
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
| 03.05.2009, 12:25 | |
|
Я думаю, можно попробовать сделать и в эмуляции обращение к портам...
Они и ненастоящие должны работать без задержки. Без getch() т.е. Где-то здесь попадалось... http://burlakovmb.narod.ru/Art... ok/g12.htm
0
|
|
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
| 03.05.2009, 13:32 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
| 04.05.2009, 20:24 [ТС] | |
|
Запускается из под винды, в режиме совместимости я проверил - все одинаково. Перелопатил кучу инфы, мне кажется самый верный способ - использовать прерывания. Пытаюсь сейчас запустить http://dklab.ru/doc/keyboard.html - не получается. Т.к. в С я еще не особо силен, прерывания не знаю, то не могу подправить код. У вас он работает? Подход описанный там мне очень подходит, я только не могу его внедрить в работу. Можете у себя проверить и дать работающий вариант.
0
|
|
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
| 05.05.2009, 21:48 [ТС] | |
|
Спасибо всем, разобрался
0
|
|
| 05.05.2009, 21:48 | |
|
Помогаю со студенческими работами здесь
18
Графика в TASM: текстовая строка, которая двигается стрелками клавиатуры, и меняет цвет при каждом нажатии клавиши
Как сделать выход из цикла при нажатии любой клавиши?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|