forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Дельта тайминг (http://forum.boolean.name/showthread.php?t=8549)

Unodeya 24.06.2009 22:08

Дельта тайминг
 
Слышал про это, но не раз в глаза код не видел. Кому не жалко поделитесь знаниями!):)

Sleepybear 24.06.2009 22:16

Ответ: Дельта тайминг
 
http://forum.boolean.name/showthread...E5%EB%FC%F2%E0
http://forum.boolean.name/showthread...E5%EB%FC%F2%E0
http://forum.boolean.name/showthread...E5%EB%FC%F2%E0

Результат поиска по слову "Дельта"

Unodeya 24.06.2009 22:42

Ответ: Дельта тайминг
 
И что? Я тоже искал... КОда я там ни нашёл...ВСё равно спасибо

Taugeshtu 24.06.2009 23:02

Ответ: Дельта тайминг
 
Код зависит в каждом конкретном случае непосредственно от кода игры, главное, что нужно понять - то, что необходимо домнажать ключевые действия (вроде перемещения и скорости проигрывания анимации) на некоторую скорость игры, которая должна быть обратно пропорциональна ФПС

Unodeya 24.06.2009 23:07

Ответ: Дельта тайминг
 
Это я понимаю... Мне нужен пример. Я понимаю что скорость перемещения обьекта нужно будет умножать на Дельту. Каким образом ведётся просчёт... Если не затруднит помогите пожалуйста.

jimon 24.06.2009 23:34

Ответ: Дельта тайминг
 
Код:

...
deltatime = 60.0 / current_fps
...
moveentity lol,0,0,speed * deltatime
...


NitE 24.06.2009 23:38

Ответ: Дельта тайминг
 
ы, напомнило мне одну историю, приключилась дня 2 назад, иду по улице и вдруг какойто старичок докапывается - короче вышел такой диалог
-"парень, незнаешь что тут происходит ?"
-"ну типа парад"
-"да я знаю ... а это, по какому поводу ?"
-"ну праздник, иванова ночь завтра"
-"да я знаю..."

Unodeya 24.06.2009 23:44

Ответ: Дельта тайминг
 
Спасибо но у меня тут проблемма.
Вычисляю фпс так:
Код:

Function Init_Count_FPS()
If (MilliSecs()-FPSTime)>=1000 Then
                FPSTime = MilliSecs()
                FPSCount = FPSCountTemp
                FPSCountTemp = 0
        EndIf
        FPSCountTemp = FPSCountTemp + 1
        Return FPSCount
End Function

deltatime = 60.0 / FPSCount

Ставлю значение дельты перед инициализацие графики в глобалы.. Не работает.. В плане скорость меняется на -1.62354+008... Что делаю не так?

jimon 25.06.2009 00:00

Ответ: Дельта тайминг
 
Unodeya
сделай их не целыми

Unodeya 25.06.2009 00:12

Ответ: Дельта тайминг
 
сделал с плавающей точкой. при проверке значения скорости игрока скорость = infinity(бесконечно)

Taugeshtu 25.06.2009 00:59

Ответ: Дельта тайминг
 
По-моему, следует сделать так:
deltatime = 60.0 / Init_Count_FPS()

Потому что у тебя FPSCount является локальной переменной твоей функции

Unodeya 25.06.2009 10:43

Ответ: Дельта тайминг
 
FPSCount обозначена как глобальная переменная. А делить число на функцию, это что-то новое)) В любом случае не получилось.. Что-то не так.. Есть у кого нибудь маленький примерчик уже со счётчиком и каким нибудь обьектом? Помогите пожалуйста...

SBJoker 25.06.2009 11:02

Ответ: Дельта тайминг
 
Цитата:

Сообщение от Unodeya (Сообщение 109013)
А делить число на функцию, это что-то новое))

Ну, вам по-видимому ещё столько всего чудесного узнать предстоит о программировании.

Неприходила мысть просто подумать логически?
- Что такое фпс? Это число кадров в секунду.
- Что нужно сделать чтобы его узнать? Сосчитать кадры сделаные за секунду!
- Как сосчитать? Тупо fps=fps+1 в конце каждого кадра
- Но считать нужно в течении секунду, как это сделать? Запоминает в переменную текущее время fps_time=Millisecs() Потом проверяем если Millisecs() - fps_time>=1000 то прошла секунда и в переменной fps у нас искомый фпс.
Для следущего измерения нужно обнулить счётчик фпс предварительно сохранив старое значение last_fps=fps, fps=0, и снова запомнить текущее время: fps_time=Millisecs().

Ну а выводить на экран конешно последнее значение фпс из переменной last_fps.

Без понимания логики работы алгоритмов, делать в программировании нечего.

Unodeya 25.06.2009 11:09

Ответ: Дельта тайминг
 
Цитата:

Сообщение от SBJoker (Сообщение 109014)
Ну, вам по-видимому ещё столько всего чудесного узнать предстоит о программировании.

Неприходила мысть просто подумать логически?
- Что такое фпс? Это число кадров в секунду.
- Что нужно сделать чтобы его узнать? Сосчитать кадры сделаные за секунду!
- Как сосчитать? Тупо fps=fps+1 в конце каждого кадра
- Но считать нужно в течении секунду, как это сделать? Запоминает в переменную текущее время fps_time=Millisecs() Потом проверяем если Millisecs() - fps_time>=1000 то прошла секунда и в переменной fps у нас искомый фпс.
Для следущего измерения нужно обнулить счётчик фпс предварительно сохранив старое значение last_fps=fps, fps=0, и снова запомнить текущее время: fps_time=Millisecs().

Ну а выводить на экран конешно последнее значение фпс из переменной last_fps.

Без понимания логики работы алгоритмов, делать в программировании нечего.

Смотри мой пост под номером #8 там мой счётчик... В блице я работаю полтора месяца... А ещё зачем нужен был весь этот офтоп с сарказмом, Зачем вообще существует тогда этот форум? Если ты так умён помоги мне пожалуйста, а не пиши в этой теме лишнего..

SBJoker 25.06.2009 11:30

Ответ: Дельта тайминг
 
1. Все переменные твоей функции должны быть глобальными
2. deltatime должна быть типа float (#)
3. На deltatime нужно умножать любое действие которое в игре должно быть стабилизировано по фпс, т.е. вместо MoveEntity ent, 10,0,0 пишем MoveEntity ent, 10*deltatime,0,0 и т.д.

Смысл умножения на делтатайм это "двигать вещи во столько раз быстрее во сколько раз наш фпс меньше проектного"

З.Ы. а FPSCount должна быть глобальной! А если она глобальная то можно невозвращать её значение из функции.


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

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