|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
22.03.2011, 02:22 | #1 |
Пользователь
Регистрация: 28.06.2009
Сообщений: 84
|
Точная задержка (ну и обработка клавиатуры).
Здравствуйте!
Пишу графическу игрушку, буду продолжать, но есть важная проблема, которая меня бесит - задержка. Стандартная процедура Delay не катит, ибо недостаточно точна для меня, да и на разных компах будет разная скорость - тоже не подходит. Перелопатил интернет в поисках точного дилея, много чего нашел, но мало что понимаю. Те дилеи, которые я смог прикрутить, слишком грубы (минимальная задержка не дает желаемой скорости игры, для некратных отклонений скорости не подходит тем более). Кто-нибудь может мне объяснить этот код: Код:
Нужна задержка, с точностью не менее 1мс, дающая одинаковую задержку на всех компьютерах PC. Про клавиатуру спрошу, когда разберусь с задержкой. Буду премного благодарен тому, кто мне поможет! Последний раз редактировалось mmx358; 22.03.2011 в 02:39. |
22.03.2011, 08:46 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) А зачем Вам старый мёртвый MS DOS ?! (я же правильно понял - Вы ваяте под TurboPascal ?)
2) стандартный delay (как и любые манипуляции с GetTickCount, так же как и манипуляции с прерываением таймера (0x1C, если память не изменяет) не могут дать точность выше 1/18 секунды (это примерно 55 мс) хотите точнее - попытайтесь использовать мультимедийный таймер (если не ошибаюсь, то под DOS он был доступен в DOS Extender'ах) Добавлено Автор: Юрий Ревич Опубликовано в журнале "Компьютерра" №42 от 27 октября 1998 года И снова о проблеме Delay Последний раз редактировалось Serge_Bliznykov; 22.03.2011 в 09:00. |
23.03.2011, 02:20 | #3 |
Пользователь
Регистрация: 28.06.2009
Сообщений: 84
|
Serge_Bliznykov, я работаю под FreePascal for DOS, потому что только в нем более-менее нормально работает графический режим.
Спасибо, я читал эти материалы, 99% из них не понял. Жаль, что некому помочь. Ведь куча игр, которые писались для дос, нормально работают со временем и на современных компах... Узнать бы, как это реализовано там. По поводу моей программки. Я прикинул, что лучшим вариантом было бы создание точки начала отсчета и точки конца отсчета, выполнение вычислений, затем, пока время не будет равно или больше точки конца отсчета, выполнять пустой цикл. Подобное мне пришло в голову сразу же, с использованием GetTime, однако точность составляет сотые доли секунды, что слишком долго. |
26.03.2011, 11:20 | #4 |
Новичок
Джуниор
Регистрация: 26.03.2011
Сообщений: 1
|
А не получится просто в начале программы с помощью таймера отловить сколько циклов проходит за 1 секунду на этом компьютере, а потом из этого исходить?
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка прерываний клавиатуры. Borland Pascal. | Kingdom_Reborn | Помощь студентам | 0 | 19.02.2011 18:02 |
Точная копия программы на любом языке | westcoastkilla | Фриланс | 2 | 20.12.2008 17:59 |
Точная копия программы на любом языке | westcoastkilla | Помощь студентам | 5 | 20.12.2008 09:23 |