Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Blitz3D

Ответ
 
Опции темы
Старый 28.12.2008, 18:22   #1
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Подмигивание Синхронизация в Blitz3D

Здравствуйте!
Не подскажете как в Blitz3D профессионально сделать, чтобы скорость игры не зависела от FPS? То есть я хочу чтобы моя игра шла на всех компах одинаково!:p Ограничивать кадры не очень хочется... Да и это вообще не решение проблемы... Я слышал о каком-то ???твиннинге???. Это из этой области???

Вот я сейчас вот таким алгоритмом пользуюсь:
fps = высчитываю фпс
If fps>999 Then fps = 999
If fps>0 Then koef#= 500.0/fps

moveentity player, 0,0, speed*koef
Но этот алгоритм плохо работает...Особенно заметны перепады скорости при перепадах фпс((( очень неприииятныЙЙ эффект!

Может кто-то знает более хорошее и качественное решение?
Спасибо
(Offline)
 
Ответить с цитированием
Старый 28.12.2008, 19:36   #2
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Синхронизация в Blitz3D

ты юзаешь непосредственный дельта-тайминг.
Для дальнейшего сглаживания времени меж рендерами надо выдеелить логику и отрисовку в два разных блока и вызвать их с частотами F1 и F2 соответсвенно, причём F2<<F1. Далее - сделать возможность отключения отдельных блоков, исходя из априорных данных(собранных тестированием производительности, втом числе и непосредственно в игре) о занимаемом ими времени. Далее можно размазать блок логики на несколько проходов.
Рендер-твининг - тот же дельта-тайминг, только в профиль.
Поэкспериментируй с оптимизацией вывода и вертикальной синхронизацией (если это возможно\уместно для данной програмы)
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Старый 28.12.2008, 20:54   #3
ELIAS
Знающий
 
Аватар для ELIAS
 
Регистрация: 31.08.2008
Адрес: Arrakis
Сообщений: 234
Написано 6 полезных сообщений
(для 6 пользователей)
Ответ: Синхронизация в Blitz3D


Спасибо, impersonalis, только вот это:
Для дальнейшего сглаживания времени меж рендерами надо выдеелить логику и отрисовку в два разных блока и вызвать их с частотами F1 и F2 соответсвенно, причём F2<<F1. Далее - сделать возможность отключения отдельных блоков, исходя из априорных данных(собранных тестированием производительности, втом числе и непосредственно в игре) о занимаемом ими времени. Далее можно размазать блок логики на несколько проходов
Это навряд ли мне грозит...пока надеюсь(((

Можно пока поподробней про Рендер-твининг??? Чем он отличается от дельта-тайминга, как его делать...

ЗЫ: Я делаю 3d аркаду-платформер
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 20:59   #4
Damp
Знающий
 
Регистрация: 12.07.2007
Сообщений: 297
Написано 50 полезных сообщений
(для 133 пользователей)
Ответ: Синхронизация в Blitz3D

Твининг хорошая штука, но бываю трудности. Вот например я не могу тени прикрутить, при синхронизации с твином. Выбор встает либо тени либо твининг.
Суть примерно такая: если ты просто ограничил количество кадров, то при падении фпс ниже твоего ограничения игра начнет замедляться, если с твином, то все будет идти с той же скоростью, только как бы рывками.
Дельта тайминг сложно провести через всю игру, нужно будет ко всему добавлять дельту - к перемещения, вращения, изменения размеров, альфы и цвета (для спрайтов) и многое другое. А твининг избавляет от этого, с лучшим эффектом промежуточные кадры.

Graphics3D 1024,768,32,1
cam=CreateCamera ()
MoveEntity cam,0,0,-5
RotateEntity CreateLight (),30,30,0
cube=CreateCube()
EntityColor cube ,100,150,250

FPS =30
period = 1000 / FPS
Time = MilliSecs () - period
Repeat
Repeat
elapsed = MilliSecs () - Time
Until elapsed
ticks = elapsed / period
tween# = Float (elapsed Mod period) / Float (period)
For framelimit = 1 To ticks
If framelimit = ticks CaptureWorld
Time = Time + period
;===
TurnEntity cube,0,1,1
If KeyDown(57) Delay ( Rand(20,40))
;===
UpdateWorld
Next
RenderWorld tween#
Flip 0 ; или 1
Until KeyHit(1)
End
(Offline)
 
Ответить с цитированием
Старый 29.12.2008, 21:50   #5
tormoz
Гигант индустрии
 
Аватар для tormoz
 
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений
(для 4,437 пользователей)
Ответ: Синхронизация в Blitz3D

Сообщение от ELIAS Посмотреть сообщение
Ограничивать кадры не очень хочется...
Почему бы и нет ?

Да и это вообще не решение проблемы...
Для твоей игры это как раз идеальный вариант.
__________________
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
синхронизация физики и анимации (newton) drwoland Полезные функции 1 21.01.2010 00:08
Синхронизация PhysX Mr_F_ Blitz3D 19 01.08.2009 00:00
Сетевая синхронизация движущихся объектов stone_evil Blitz3D 9 11.01.2008 12:19
Синхронизация HolyDel Blitz3D 31 19.08.2007 16:21
Синхронизация юнитов в стратегии stone_evil 3D-программирование 8 25.01.2007 13:58


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com