Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D > 2D-программирование

2D-программирование Вопросы, касающиеся двумерного программирования

Ответ
 
Опции темы
Старый 11.06.2011, 15:34   #1
icepuls
Оператор ЭВМ
 
Аватар для icepuls
 
Регистрация: 28.05.2011
Адрес: планета Земля
Сообщений: 49
Написано 16 полезных сообщений
(для 65 пользователей)
скорость игры

Привет всем !

Написал игру на Blitz3d используя чисто 2d формат
сокращенно суть кода такая....
frameTimer=CreateTimer(60)
While Not KeyHit(1)
WaitTimer(frameTimer)
Cls
; отрисовка чисто 2d
Flip
Wend

Сейчас пишу игру на Blitz3d в 2d с использованием FastImage
сокращенно суть кода такая....
frameTimer=CreateTimer(60)
While Not KeyHit(1)
WaitTimer(frameTimer)
Cls
; отрисовка 2d при помощи FastImage
Flip
Wend

Вопрос:
в первом коде отрисовка экрана нормальная....
почему во втором случае при использовании FastImage команда WaitTimer(frameTimer) сильно тормозит отрисовку экрана
при отключении WaitTimer(frameTimer) отрисовка экрана нормальная ?

Вопрос:
Какой способ сделать скорость игры одинаковой (на разных
компьютерах), в случае использования FastImage, наиболее
подходящий ?

Подскажите кто знает............
(Offline)
 
Ответить с цитированием
Старый 11.06.2011, 16:04   #2
baton4ik
Дэвелопер
 
Аватар для baton4ik
 
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений
(для 1,962 пользователей)
Ответ: скорость игры

Гугли "дельтатайминг".
(Offline)
 
Ответить с цитированием
Старый 13.06.2011, 10:36   #3
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: скорость игры

Я еще эту проблему не решал, но думаю, что ее можно решить следующим образом:
startTime=MilliSecs()
; здесь весь код цикла
passed=MilliSecs()-startTime
If passed<40 Delay 40-passed
Время 40 взято для примера, это количество времени, рассчитанное на один кадр. Если с момента начала выполнения тела цикла прошло меньше, чем 40 миллисекунд, то надо подождать, если больше, то игра и без того будет зависать, так что ждать не имеет смысла.

Однако я думаю, что тут все нужно делать серьезнее - в начале тела цикла узнавать, сколько прошло времени с момента прошлого начала исполнения тела цикла, эту величину заносить в переменную (к примеру, ту же passed), и потом подставлять прошедшее время в качестве коэффициента:
MoveEntity player, 0, 0, 0.01*passed
Таким образом за секунду человек сдвинется на 10 (0.01*1000) по оси Z.
Почему 2-й способ лучше 1-го? Потому, что при использовании 1-го способа, если компьютер зависает, то темп игры будет значительно медленнее, а при исп. 2-го способа этого удастся избежать.
(Offline)
 
Ответить с цитированием
Старый 13.06.2011, 11:16   #4
Amatsu
Дэвелопер
 
Аватар для Amatsu
 
Регистрация: 24.07.2008
Сообщений: 1,544
Написано 1,095 полезных сообщений
(для 2,706 пользователей)
Ответ: скорость игры

Как раз несколько дней назад решал эту проблему, тоже юзаю Fast-либы. В общем сделал так - разделил функцию отвечающую за обработку игры на две - в первой функции обсчитывается математика, во второй - графика. Ту что обсчитывает математику запихнул в цикл с ограничением фпс, в результате все передвижения спрайтов у меня стабилизировались до нужной скорости. А вторую функцию отрисовки вынес за цикл, в результате у меня на одной машине 70 фпс, ну другой 120 фпс, а скорость обсчета механизмов игры все время стабильно залочена на 30 фпс.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Amatsu за это полезное сообщение:
LLI.T.A.L.K.E.R. (14.06.2011), Wegox (08.04.2012)
Старый 13.06.2011, 12:40   #5
Hagrael
Нуждающийся
 
Регистрация: 11.06.2011
Сообщений: 57
Написано 6 полезных сообщений
(для 7 пользователей)
Ответ: скорость игры

2 цикла попутно?
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 11:14.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com