forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Основной форум (http://forum.boolean.name/forumdisplay.php?f=49)
-   -   GetRelativeTimeMs (http://forum.boolean.name/showthread.php?t=6293)

Romanzes 27.08.2008 23:58

GetRelativeTimeMs
 
Вложений: 2
Я тут пытался делать игрушку и обнаружил 2 фигни:
1. Функция GetRelativeTimeMs работает как-то странно - с ее помощью не получается отловить моменты меньше 10 мс. В первом аттаче лежит маленькая прога, которая это демонстрирует.
2. Во втором аттаче игрушко, которое я начал делать, я там пытался обойти первую фигню, специально делая задержку, но ни фига не работает. Короче, там в исходнике я закомментил строку, которая должна быть вместо той, что я написал. Сломал мозг, не пойму в чем косяк. Так как сейчас сделано, меня не устраивает, потому что может по-разному работать на слабых и мощных телефонах.

odd 28.08.2008 08:23

Ответ: GetRelativeTimeMs
 
1. Не увидел никаких проблем в первом примере. Интервалы между итерациями в эмуляторах составляют 15 - 16 мс, пробовал у себя в телефоне 12 - 13 мс. А ты хотел ровно 10 что ли?
2. Зачем хранить интервал в вещественном числе? Тем более что используется низкая точность вычислений (до 0.0001) возможно вся твоя проблема именно в этом. Храни задержку в простом integer.

beisik 28.08.2008 17:17

Ответ: GetRelativeTimeMs
 
не замечал, функция гуд. а задержку в игре я реализовываю вот так, отлично работает:

Код:

var
lastTime: integer;
ups: integer;
...
ups := 25;
lastTime := GetRelativeTimeMs - 1000 div ups;
...
GameQuit := false;
repeat
  while GetRelativeTimeMs - lastTime >= (1000 div ups) do
  begin
    Update;
    lastTime := lastTime + (1000 div ups);
  end;
  UpdateButtons;
  Draw;
  repaint;
until GameQuit;


Romanzes 28.08.2008 22:08

Ответ: GetRelativeTimeMs
 
Блин, забыл, что в первом аттаче надо было строку delay(10) поменять на delay(1). Тогда и увидите.
beisik, я тоже так делал, но получается как бы стабилизация фпс, например все время 25 кадров в секунду. А мне хочется чтоб фпс было максимальным и зависело от мощности мобилы. Как это сделать?

beisik 29.08.2008 13:02

Ответ: GetRelativeTimeMs
 
Romanzes
Никакой стабилизации фпс. Фпс максимальное, у меня весь игровой цикл разбит на Update (игровая логика рассчитывается), Render (отрисовывается) и UpdateButtons (это кнопочки проверять). Так вот, происходит стабилизация не фпс (вызов Draw), а ups (вызов Update). Так Update процедура выполняется абсолютно всегда 25 раз в секунду, а Draw - как позволяет телефон :)


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

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