|
2D-программирование Вопросы, касающиеся двумерного программирования |
22.11.2007, 19:15
|
#1
|
Знающий
Регистрация: 10.09.2007
Сообщений: 262
Написано 6 полезных сообщений (для 8 пользователей)
|
Одинаковая скорость.
Совет всем новичкам писать эту фишку, чтоб потом не сталкиваться с проблемами разной скорости на разных компах, особенно в крупных проектах.
Как это сделать:
1) Сразу после инициализации графики пишем:
Global elapsed,FPS,period,time,ticks,tween#
FPS=50
period=1000/FPS
time=MilliSecs()-period
2) В главном цикле пишем:
elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period
tween#=Float(elapsed Mod period)/Float(period)
For k=1 To ticks
time=time+period
3) Между UpdateWorld и RenderWorld пишем:
If k=ticks Then CaptureWorld
Next
4) Меняем RenderWorld наRenderWorld tween
PS:Все это из примера Castle, поставляемого с программой
Как видите все просто
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
22.11.2007, 19:20
|
#2
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Одинаковая скорость.
AndruXa, ага, я эту фишку распространяю давныыым давно.
Вот она, сразу кодом
|
(Offline)
|
|
22.11.2007, 19:31
|
#3
|
Blitz's Shame !!
Регистрация: 31.03.2007
Сообщений: 3,639
Написано 832 полезных сообщений (для 2,013 пользователей)
|
Re: Одинаковая скорость.
есть еще варианты ??
|
(Offline)
|
|
22.11.2007, 19:53
|
#4
|
Знающий
Регистрация: 10.09.2007
Сообщений: 262
Написано 6 полезных сообщений (для 8 пользователей)
|
Re: Одинаковая скорость.
Других не знаю, а че, этого мало
|
(Offline)
|
|
22.11.2007, 19:54
|
#5
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Одинаковая скорость.
Да и называеться она: Синхронизация.
Я бы назвал так: Стабилизация UPS.
|
(Offline)
|
|
22.11.2007, 21:10
|
#6
|
|
Re: Одинаковая скорость.
есть еще синхронизация по дельта таймингу
синхротизация по таймеру
и есть еще тупое ограничение Fps мертвыми циклами
еще много чего есть
|
|
|
23.11.2007, 00:11
|
#7
|
Знающий
Регистрация: 10.09.2007
Сообщений: 262
Написано 6 полезных сообщений (для 8 пользователей)
|
Re: Одинаковая скорость.
Извиняюсь, но это создавалось для новичков, Вспомните себя вам и это было сложно(как и мне)
|
(Offline)
|
|
23.11.2007, 00:52
|
#8
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Одинаковая скорость.
Для новичков создавались Хелп, CreateTimer() и WaitTimer().
Тебя заверить могу, что простого более и стабильного способа ФПС стабилизации найти не стоит пытаться даже, юный падаван...
А ежели серьезно, то методов этих - как грязи и нужно выбирать наиболее подходящий к конкретной сиуации. Если же разницы между методами не видишь- не ищи лучшего от хорошего и юзай штатный таймер.
|
(Offline)
|
|
23.11.2007, 01:58
|
#9
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Одинаковая скорость.
Diplomat дело говорит, помнится он совместно с tormoz сделали комбинированную систему.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
23.11.2007, 11:37
|
#10
|
.
Регистрация: 05.08.2006
Сообщений: 10,429
Написано 3,454 полезных сообщений (для 6,863 пользователей)
|
Re: Одинаковая скорость.
Diplomat, но дело то в том, что таким ограничением как во 2 посту по ссылке, реализуеться и небольшая оптимизация, т.к. рендер и логика не идут паралельно, а порой рендер пропускаеться, поэтому получается что упс первостепеннен а фпс если позволяеться - будет. С таймером же, они всегда вместе и поэтому фпс будет ниже чем с этим ограничением.
имхо.
|
(Offline)
|
|
23.11.2007, 14:48
|
#11
|
Дэвелопер
Регистрация: 07.09.2005
Сообщений: 1,519
Написано 66 полезных сообщений (для 164 пользователей)
|
Re: Одинаковая скорость.
он совместно с tormoz сделали комбинированную систему
|
Сделать-то сделали, только она работала лишь на стенде, выдавая чудесные глюки при попытке практического применения. В общем, это был сферический конь в вакууме. )
С таймером же, они всегда вместе и поэтому фпс будет ниже чем с этим ограничением.
|
На максимальных нагрузках ФПС, т.е. количество проходов рендера, с таймером будет выше, зато будет тормозить логика и игра замедлится.
Синхронизатор зарежет ФПС фреймскипами, в итоге логика тормозить не будет, но на экране будет в лучшем случае слайдшоу.
Дельтатайминг достаточно нестабилен- возможны постоянные перепады скорости и рывки.
...
В итоге лично я избрал сочетание "программный ограничитель проходов логики" + "включаемый фреймскип" + "рендер твининг". В наиболее примитивном виде это выглядит так:
;Всё внутри главного цикла
;Ограничитель логики
IF LogicDelay<Millisecs() THEN
LogicDelay=LogicDelay+LogicMaxCycleDealy
IF LogicDelay<Millisecs() THEN LogicDelay=Millisecs()+LogicMaxCycleDealy
;Тут вставляем обновление логики
ENDIF
;Рендер
RenderSkip=1-RenderSkip
IF RenderSkip=0 THEN RenderWorld()
Очевидно, фреймскип следует делать включаемым, зависимым от ФПС. Можно также ввести рендер твининг, хотя в Блице он не архистабилен.
И конечно же не стоит удивляться второй строке кода.
|
(Offline)
|
|
17.08.2008, 23:46
|
#12
|
ПроЭктировщик
Регистрация: 26.06.2007
Сообщений: 194
Написано 21 полезных сообщений (для 25 пользователей)
|
Re: Одинаковая скорость.
Есть еще вариант, с хелпа блитза :
;************************************************* ****
Описание
Используйте эту команду в паре с WaitTimer для контроля скорости выполнения игры (fps). Вы можете использовать это в главном цикле программы. Это не позволит выполняться игре быстрее на более мощных компьютерах. Использование этой системы очень хорошая практика, если ваша игра будет выполняться на различных компьютерах.
Пример
; Создаём таймер для контроля скорости
frameTimer=CreateTimer(60)
; Главный цикл отрисовки экрана
While Not KeyHit(1)
WaitTimer(frameTimer) ; Пауза пока не пройдет 60 млс. с прошлого вызова
Cls
; Сама отрисовка
Flip
Wend
; Уничтожаем таймер
FreeTimer(frameTimer)
;************************************************* *******
|
(Offline)
|
|
28.08.2008, 13:05
|
#13
|
Троллота
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений (для 1,772 пользователей)
|
Ответ: Одинаковая скорость.
Это идиотизм
|
(Offline)
|
|
28.08.2008, 13:18
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Ответ: Одинаковая скорость.
|
(Offline)
|
|
28.08.2008, 13:31
|
#15
|
Троллота
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений (для 1,772 пользователей)
|
Ответ: Одинаковая скорость.
Если время просчета логики займет больше времени чем нужно, резко снижается скорость игры. На слабых же компах все начинает тормозить из-за того что "отстает" прорисовка. Вроде бы так )
извиняюсь ))) Здесь же только прорисовка
Последний раз редактировалось Tadeus, 28.08.2008 в 13:36.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Похожие темы
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
скорость сакачки |
ger1234567 |
Delphi |
0 |
31.12.2008 23:30 |
Тест на скорость |
newman |
Болтовня |
1 |
04.05.2008 23:42 |
Скорость |
Fant |
3D-программирование |
36 |
24.06.2007 01:21 |
Скорость |
smaller |
3D-программирование |
5 |
21.08.2006 16:02 |
Часовой пояс GMT +4, время: 10:19.
|