|
3D-программирование Вопросы, касающиеся программирования 3D мира |
24.06.2009, 22:08
|
#1
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Дельта тайминг
Слышал про это, но не раз в глаза код не видел. Кому не жалко поделитесь знаниями!)
|
(Offline)
|
|
24.06.2009, 22:16
|
#2
|
ПроЭктировщик
Регистрация: 13.02.2009
Сообщений: 134
Написано 21 полезных сообщений (для 22 пользователей)
|
Ответ: Дельта тайминг
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
24.06.2009, 22:42
|
#3
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
И что? Я тоже искал... КОда я там ни нашёл...ВСё равно спасибо
|
(Offline)
|
|
24.06.2009, 23:02
|
#4
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Дельта тайминг
Код зависит в каждом конкретном случае непосредственно от кода игры, главное, что нужно понять - то, что необходимо домнажать ключевые действия (вроде перемещения и скорости проигрывания анимации) на некоторую скорость игры, которая должна быть обратно пропорциональна ФПС
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
24.06.2009, 23:07
|
#5
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
Это я понимаю... Мне нужен пример. Я понимаю что скорость перемещения обьекта нужно будет умножать на Дельту. Каким образом ведётся просчёт... Если не затруднит помогите пожалуйста.
|
(Offline)
|
|
24.06.2009, 23:34
|
#6
|
|
Ответ: Дельта тайминг
...
deltatime = 60.0 / current_fps
...
moveentity lol,0,0,speed * deltatime
...
|
|
|
Сообщение было полезно следующим пользователям:
|
|
24.06.2009, 23:38
|
#7
|
злобный флудер
Регистрация: 10.07.2007
Сообщений: 2,585
Написано 789 полезных сообщений (для 1,476 пользователей)
|
Ответ: Дельта тайминг
ы, напомнило мне одну историю, приключилась дня 2 назад, иду по улице и вдруг какойто старичок докапывается - короче вышел такой диалог
-"парень, незнаешь что тут происходит ?"
-"ну типа парад"
-"да я знаю ... а это, по какому поводу ?"
-"ну праздник, иванова ночь завтра"
-"да я знаю..."
|
(Offline)
|
|
Эти 3 пользователя(ей) сказали Спасибо NitE за это полезное сообщение:
|
|
24.06.2009, 23:44
|
#8
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
Спасибо но у меня тут проблемма.
Вычисляю фпс так:
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... Что делаю не так?
|
(Offline)
|
|
25.06.2009, 00:00
|
#9
|
|
Ответ: Дельта тайминг
Unodeya
сделай их не целыми
|
|
|
25.06.2009, 00:12
|
#10
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
сделал с плавающей точкой. при проверке значения скорости игрока скорость = infinity(бесконечно)
|
(Offline)
|
|
25.06.2009, 00:59
|
#11
|
scientist.alien
Регистрация: 12.02.2007
Сообщений: 2,098
Написано 1,030 полезных сообщений (для 2,593 пользователей)
|
Ответ: Дельта тайминг
По-моему, следует сделать так:
deltatime = 60.0 / Init_Count_FPS()
Потому что у тебя FPSCount является локальной переменной твоей функции
__________________
Public service announcement: вы можете заблокировать отображение сообщений определённого пользователя, добавив его ник в список игнорируемых.
Tau lab. We LOVE you. We MADE you.
|
(Offline)
|
|
25.06.2009, 10:43
|
#12
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
FPSCount обозначена как глобальная переменная. А делить число на функцию, это что-то новое)) В любом случае не получилось.. Что-то не так.. Есть у кого нибудь маленький примерчик уже со счётчиком и каким нибудь обьектом? Помогите пожалуйста...
|
(Offline)
|
|
25.06.2009, 11:02
|
#13
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Дельта тайминг
Сообщение от Unodeya
А делить число на функцию, это что-то новое))
|
Ну, вам по-видимому ещё столько всего чудесного узнать предстоит о программировании.
Неприходила мысть просто подумать логически?
- Что такое фпс? Это число кадров в секунду.
- Что нужно сделать чтобы его узнать? Сосчитать кадры сделаные за секунду!
- Как сосчитать? Тупо fps=fps+1 в конце каждого кадра
- Но считать нужно в течении секунду, как это сделать? Запоминает в переменную текущее время fps_time=Millisecs() Потом проверяем если Millisecs() - fps_time>=1000 то прошла секунда и в переменной fps у нас искомый фпс.
Для следущего измерения нужно обнулить счётчик фпс предварительно сохранив старое значение last_fps=fps, fps=0, и снова запомнить текущее время: fps_time=Millisecs().
Ну а выводить на экран конешно последнее значение фпс из переменной last_fps.
Без понимания логики работы алгоритмов, делать в программировании нечего.
__________________
|
(Offline)
|
|
Эти 6 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
25.06.2009, 11:09
|
#14
|
ПроЭктировщик
Регистрация: 14.05.2009
Сообщений: 101
Написано 31 полезных сообщений (для 67 пользователей)
|
Ответ: Дельта тайминг
Сообщение от SBJoker
Ну, вам по-видимому ещё столько всего чудесного узнать предстоит о программировании.
Неприходила мысть просто подумать логически?
- Что такое фпс? Это число кадров в секунду.
- Что нужно сделать чтобы его узнать? Сосчитать кадры сделаные за секунду!
- Как сосчитать? Тупо fps=fps+1 в конце каждого кадра
- Но считать нужно в течении секунду, как это сделать? Запоминает в переменную текущее время fps_time=Millisecs() Потом проверяем если Millisecs() - fps_time>=1000 то прошла секунда и в переменной fps у нас искомый фпс.
Для следущего измерения нужно обнулить счётчик фпс предварительно сохранив старое значение last_fps=fps, fps=0, и снова запомнить текущее время: fps_time=Millisecs().
Ну а выводить на экран конешно последнее значение фпс из переменной last_fps.
Без понимания логики работы алгоритмов, делать в программировании нечего.
|
Смотри мой пост под номером #8 там мой счётчик... В блице я работаю полтора месяца... А ещё зачем нужен был весь этот офтоп с сарказмом, Зачем вообще существует тогда этот форум? Если ты так умён помоги мне пожалуйста, а не пиши в этой теме лишнего..
Последний раз редактировалось Unodeya, 25.06.2009 в 11:20.
|
(Offline)
|
|
25.06.2009, 11:30
|
#15
|
Злобный Админ
Регистрация: 04.09.2005
Сообщений: 5,926
Написано 3,415 полезных сообщений (для 9,330 пользователей)
|
Ответ: Дельта тайминг
1. Все переменные твоей функции должны быть глобальными
2. deltatime должна быть типа float (#)
3. На deltatime нужно умножать любое действие которое в игре должно быть стабилизировано по фпс, т.е. вместо MoveEntity ent, 10,0,0 пишем MoveEntity ent, 10*deltatime,0,0 и т.д.
Смысл умножения на делтатайм это "двигать вещи во столько раз быстрее во сколько раз наш фпс меньше проектного"
З.Ы. а FPSCount должна быть глобальной! А если она глобальная то можно невозвращать её значение из функции.
__________________
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо SBJoker за это полезное сообщение:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:42.
|