Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Скорость работы программы независимо от скорости процессора.

296
22 мая 2008 года
Virtuoso
331 / / 31.07.2005
Visual Basic 6.0

Здравствуйте.
Всегда хотел узнать как в играх делают скорость движения людей, машин и т.п. одну и ту же независимо от скорости процессора (кроме случаев, конечно, когда скорость процессора меньше требуемой). Я делаю программу с прорисовкой простейшей графики - линии, буквы на форме, движение изображений по форме. Для паузы использую SLEEP. Но на других компах скорость программы другая (меньше), а так как мне нужно будет показывать эту программу на другом компе, то надо подгонять скорость под него а это геморой). Буквы видимо не вызывают проблем ни у кого из компов, везде скорость одинаковая. а вот постепенная прорисовка линий и движение изображений... В общем с помощью каких функций можно избежать этой зависимости? Мне так думается нужно подключать DirectX....? Простыми средствами VB этого не решить....
Спасибо.
17K
23 мая 2008 года
HookEst
144 / / 27.03.2008
А рисовать каждый кадр по таймеру не пробовал?
296
23 мая 2008 года
Virtuoso
331 / / 31.07.2005
Конечно пробовал. Но таймер - это какая-то странная вещь. Допустим ставишь интервал 50 - работает, 40 - такая же скорость, - 30 такая же скорость, 15 - опа быстрее стало, 10 - также как и 15. Получается если я без таймера, в простом цикле передвигаю изображение с шагом в 5 точек, то в таймере с интервалом в 15 милисек. для достижения такой же зримой скорости нужно сделать шаг в 50. А тут уже получается видимое моргание картинки, а не плавное передвижение. (не обращайте внимание на числа, писал для примера).
Когда делал медленное проявление рисунка с помощью AlphaBlend Lib "msimg32", мне необходимо было проявление рисунка от полной прозрачночти до отсутствия прозрачности = 1.5, 2 сек. Когда делаешь циклом с шагом 1, получается плавное проявление, но скорость зависила от размера изображения. Когда делал таймером, приходилось для достижения требуемой скорости проявки увеличивать шаг - и как следствие не плавное проявление, а моргание.
Хочу от этого избавиться. Надеюсь ясно изложил своё желание)
1
23 мая 2008 года
kot_
7.3K / / 20.01.2000
Цитата: Virtuoso
Конечно пробовал. Но таймер - это какая-то странная вещь. Допустим ставишь интервал 50 - работает, 40 - такая же скорость, - 30 такая же скорость, 15 - опа быстрее стало, 10 - также как и 15. Получается если я без таймера, в простом цикле передвигаю изображение с шагом в 5 точек, то в таймере с интервалом в 15 милисек. для достижения такой же зримой скорости нужно сделать шаг в 50. А тут уже получается видимое моргание картинки, а не плавное передвижение. (не обращайте внимание на числа, писал для примера).
Когда делал медленное проявление рисунка с помощью AlphaBlend Lib "msimg32", мне необходимо было проявление рисунка от полной прозрачночти до отсутствия прозрачности = 1.5, 2 сек. Когда делаешь циклом с шагом 1, получается плавное проявление, но скорость зависила от размера изображения. Когда делал таймером, приходилось для достижения требуемой скорости проявки увеличивать шаг - и как следствие не плавное проявление, а моргание.
Хочу от этого избавиться. Надеюсь ясно изложил своё желание)


двойная буферизация - естественно вам это надо будет перенести под басик.

16K
23 мая 2008 года
Alfá
59 / / 12.01.2007
А не проще ли просто поставить в True Form1->DoubleBuffed?
296
24 мая 2008 года
Virtuoso
331 / / 31.07.2005
Спасибо, буду пробовать.
33K
25 мая 2008 года
ACW-Coder
17 / / 02.01.2008
Цитата:
Но таймер - это какая-то странная вещь. Допустим ставишь интервал 50 - работает, 40 - такая же скорость, - 30 такая же скорость, 15 - опа быстрее стало, 10 - также как и 15.


Просто таймер не может генерировать больше 18-18.5 прерываний в секунду - а это и есть интервал около 50 мс. Меньше ставить просто нет смысла. Странно только то, что оно на 15 мс. работает быстрее.

296
26 мая 2008 года
Virtuoso
331 / / 31.07.2005
Ну не знаю на счёт 18-ти... У меня 64 максимально.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог