forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   скорость игры (http://forum.boolean.name/showthread.php?t=14879)

icepuls 11.06.2011 15:34

скорость игры
 
Привет всем !

Написал игру на 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, наиболее
подходящий ?

Подскажите кто знает............:dontknow:

baton4ik 11.06.2011 16:04

Ответ: скорость игры
 
Гугли "дельтатайминг".

Hagrael 13.06.2011 10:36

Ответ: скорость игры
 
Я еще эту проблему не решал, но думаю, что ее можно решить следующим образом:
Код:

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-го способа этого удастся избежать.

Amatsu 13.06.2011 11:16

Ответ: скорость игры
 
Как раз несколько дней назад решал эту проблему, тоже юзаю Fast-либы. В общем сделал так - разделил функцию отвечающую за обработку игры на две - в первой функции обсчитывается математика, во второй - графика. Ту что обсчитывает математику запихнул в цикл с ограничением фпс, в результате все передвижения спрайтов у меня стабилизировались до нужной скорости. А вторую функцию отрисовки вынес за цикл, в результате у меня на одной машине 70 фпс, ну другой 120 фпс, а скорость обсчета механизмов игры все время стабильно залочена на 30 фпс.

Hagrael 13.06.2011 12:40

Ответ: скорость игры
 
2 цикла попутно?


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

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot