Показать сообщение отдельно
Старый 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)
 
Ответить с цитированием