0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
1 | |
Движение объекта, управление стрелками. Перестает работать при нажатии любой клавиши02.05.2009, 19:05. Показов 15010. Ответов 17
Метки нет (Все метки)
Здравствуйте.
Пишу игру в танчики. Borland C++ 3.1 1. Сейчас реализовал само движение объекта с помощью стрелок. Проблема в том, что когда я жму на одну из клавиш управления (влево например), объект перемещается нормально. Но как только я нажму любую клавишу на клавиатуре, то движение прекращается. Не могу понять в чем проблема и как исправить. 2. При начале движения, первый шаг рисуется нормально, потом возникает задержка и начинается нормальное движение. Как убрать эту задержку и от чего она вообще возникает? Если нужен исходный код, я обязательно выложу. Спасибо.
0
|
02.05.2009, 19:05 | |
Ответы с готовыми решениями:
17
Движение объекта при нажатии какой-либо клавиши связать с таймером Движение объекта (квадрата) по экрану, управление клавишами-стрелками и WASD Lenovo b575e - Перестает работать тачпад после нажатия любой клавиши на клавиатуре Графика в TASM: текстовая строка, которая двигается стрелками клавиатуры, и меняет цвет при каждом нажатии клавиши |
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
02.05.2009, 20:42 | 2 |
исходный код необходим!
0
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
||||||
02.05.2009, 23:17 [ТС] | 3 | |||||
0
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
03.05.2009, 10:25 | 4 |
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 [ТС] | 5 |
Мне необходимо получить именно адрес, т.к. потом нужно запомнить координаты после сдвига. Если не писать амперсанды, то передача будет по значению, и новые кординаты не будут сохраняться.
Насчет getch() не понял что нет так.. Первый раз считываю код клавиши и если считан 0, то нажата спец. клавиша и читаем еще раз для получения scan-кода. Добавлено через 3 минуты 18 секунд Очень-очень удивительно. Может вы нажимали не любую клавишу, а стрелки? Попробуйте во время движения нажать пробел (в будущем это выстрел). Объект продолжит движение, или остановиться? 2. Я и bioskey() использовал, задержка тоже есть...
0
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
03.05.2009, 10:59 | 6 |
w1zard, простите, что вмешиваюсь, но radiohobbyt, правильно написал.
getch() фиксирует СИМВОЛ, а не НАЖАТИЕ на клавишу. разница в том, что СИМВОЛ "ОС Винды" определяет после того как клавишу ОТПУСТИЛИ, либо нажали, и прошла ЗАДЕРЖКА на повтор, установленная в системных настройках. Вот и ваша пауза. используйте другой метод.
0
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
03.05.2009, 11:12 [ТС] | 7 |
Patch, спасибо за разъяснение
Но, я стал использовать getch() только потому, что bioskey(0) тоже не работало. Всмысле работало точно также как сейчас работает getch(). А какой метод мне использовать? Мне больше ничего пока не известно PS: без использования функций win api нужно.
0
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
03.05.2009, 11:46 | 8 |
Насколько я понял, bioskey использует прерывания...
на WinXP, Vista и старше это работать не будет: Винды не дают программам доступа к прерываниям. а почему нельзя использовать WinAPI? вы наивно полагаете, что getch() работает без него?
0
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
03.05.2009, 11:56 | 9 |
э....хороший вопрос...используется борланд с++ 3.1...это вообще мсдос...=)
0
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
03.05.2009, 12:03 [ТС] | 10 |
была поставлена задача написать именно под дос. Да, bioskey использует прерывания, тогда и она отпадает, так и постает вопрос: а все-таки, по первому пункту, прочитайте мое сообщение: https://www.cyberforum.ru/post152062.html
0
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
03.05.2009, 12:04 | 11 |
Из под Винды дос-программу в обход Виндов запустить вообще-то нельзя. Будет эмуляция. Кстати, возможно, и из-за этого лаги и идут.
Как вариант, можно попытаться запустить в режиме совместимости с Win95/98. И есть там еще дополнительные текстовые службы... проверте.
0
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
03.05.2009, 12:15 | 12 |
осталась одна нехорошая мысль...работать с клавиатурой напрямую...см. например "ПРограммирование аппаратных средств в Windows" В. Несвижский. я такого не делал...но работать должно.
на на тему того, что не работает у вас, но работает у меня...так это после нажатия пробела, не отпуская стрелок(попробуйте нажать любую клавишу, потом нажать вторую и отпустить). еще раз прочитайте, что делает getch(), он берет символ из консоли, не отображая его. так оно и должно работать, как оно и работает. хоть что за ось, под которой это запускается? не пишется под которую(дос), а под которой запускается?
0
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
03.05.2009, 12:20 | 13 |
Нет, работать напрямую с клавой не получится.
Если, конечно, не написать системный драйвер, а для этого... и опять-же он будет под Винды. Вся остальная работа - только эмуляция.
0
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
03.05.2009, 12:23 | 14 |
ну...если все это работает под мсдосом(или 98), то я думаю, что получится.
0
|
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
|
|
03.05.2009, 12:25 | 15 |
Я думаю, можно попробовать сделать и в эмуляции обращение к портам...
Они и ненастоящие должны работать без задержки. Без getch() т.е. Где-то здесь попадалось... http://burlakovmb.narod.ru/Art... ok/g12.htm
0
|
192 / 190 / 15
Регистрация: 27.01.2009
Сообщений: 548
|
|
03.05.2009, 13:32 | 16 |
0
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
04.05.2009, 20:24 [ТС] | 17 |
Запускается из под винды, в режиме совместимости я проверил - все одинаково. Перелопатил кучу инфы, мне кажется самый верный способ - использовать прерывания. Пытаюсь сейчас запустить http://dklab.ru/doc/keyboard.html - не получается. Т.к. в С я еще не особо силен, прерывания не знаю, то не могу подправить код. У вас он работает? Подход описанный там мне очень подходит, я только не могу его внедрить в работу. Можете у себя проверить и дать работающий вариант.
0
|
0 / 0 / 0
Регистрация: 30.04.2009
Сообщений: 9
|
|
05.05.2009, 21:48 [ТС] | 18 |
Спасибо всем, разобрался
0
|
05.05.2009, 21:48 | |
05.05.2009, 21:48 | |
Помогаю со студенческими работами здесь
18
При нажатии любой клавиши появляется картинка Выход из бесконечного цикла в GraphABC при нажатии клавиши (любой) Как сделать выход из цикла при нажатии любой клавиши? Как закрыть форму при нажатии любой клавиши на клавиатуре Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |