|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
Движение объекта, управление стрелками. Перестает работать при нажатии любой клавиши02.05.2009, 19:05. Показов 15975. Ответов 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): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|