forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты на BlitzMax (http://forum.boolean.name/forumdisplay.php?f=106)
-   -   Wrecking Crew & LodeRunner : Leeroy (http://forum.boolean.name/showthread.php?t=8154)

Ende 07.04.2009 03:21

Wrecking Crew & LodeRunner : Leeroy
 
Всем привет, решил отписаться по поводу своего первого, я надеюсь, в будущем законченного (так как угробил времени не так мало) проекта. На нем, по сути, я и учусь делать игры и рисовать арт)) Это аркада, если есть такое право выразиться ремейк Wrecking Crew на NES + хочу добавить геймплей лодераннера, так сказать совместить эти две игры. Получается пока что не так уж и плохо, пишу параллельно игровую механику и редактор, черт побери, карт)) Игра на BlitzMax, вот один скрин, выложу еще где-то завтра-послезавтра.



Друзья, у меня к вам вопрос - как стабилизировать fps?? Он каждый раз разный при запуске игры!!

impersonalis 07.04.2009 11:36

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Цитата:

как стабилизировать fps??
Рассчитывать все изменения в игре от dt, где dt - время, прошедшее с последнего обновления. Это же позволяет сделать рендер-твининг (Blitz3D). Это что касается привязки к фпс (синхронизации); теперь о стабилизации. Обновлять графику (в плане рисовать её) не каждую итерацию,а раз 30 в секунду (человек имеет где-то 25Гц зрительного рефреш-а). В освободившиеся промежутки времени (из-за неперманентного режима отрисовки) обрабатывать тяжёлые, но не критичные ко времени завершения обсчёта участки логики. Дробить объекты на подгруппы, обрабатывая их по частям (на 1ой итерации боты с №0-19, на 2ой - 20-39, на 3ей - 40-45 [т.к. тут включилась отрисовка] и т.д.). Оптимизировать графический вывод - отрисовывать тока необходимый участок экрана (если это не делается движком), кешировать в простойные моменты (как вызванные слабой активностью игрока, так и итерацией без отрисовки) пока ненужные, но прогнозируемые участки. Перерисовывать только изменённые с последнего раза участки (правда, это моет спровоцировать неоправданный рост объёма логики отрисовки).

ABTOMAT 07.04.2009 16:34

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Цитата:

(человек имеет где-то 25Гц зрительного рефреш-а)
Херня и выдумка рекламщиков 25-го кадра
Или как же тогда объяснить тот факт что человек может спокойно отличить 25 Гц от 100 ?

SBJoker 07.04.2009 18:07

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
всё элементарно просто, частота "захвата кадров" мозгом с сетчатки глаза 24Гц.
Однако изображение с частотой 24Гц может быть недостаточно из-за рассинхронизованности двух систем (человеческого мозга и воспроизводящего видео устройства). Поэтому наибольшая вероятность захвата глазом изображения в момент смены кадров на устройстве примерно на половину. в то время как вероятность захватить глазом кадр именно в момент переключения кадров 1/24 что маловато..

при частоте 100гц, имеет более 4х кратное увеличение частоты и значит вероятность увидеть полный кадр увеличивается в 4 раза т.е. 4/24 или 1/6.

Но на такой частоте уже в игру вступает инерционность зрения, которая выражается в запоминании сетчаткой глаза предыдущего кадра...который потом медленно начинает пропадать... и следущее изображение складывается с остаточным изображение и мы получает то самое смазывание на больших скоростях..

impersonalis 07.04.2009 20:39

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
выдумка: особое восприятие гинотизрующего кадра номер 25.
правда: свыше 25 кадров осознанно оценить сложно, кадры свыше позволят достичь мягкости хода и комфортности восприятия (что, собсно, написал выше Джокер)
Цитата:

Или как же тогда объяснить тот факт что человек может спокойно отличить 25 Гц от 100 ?
ну уж.. 25 от 60-70.. а вот 90 от 100 - чего-т сомневаюсь.
Или ты в принципе настиваешь, что глаз не имеет конечной сокрости восприятия? А ТВ жадничают, выдавая такой низкий рефреш?
Да и как-то: я могу плоскую картинку от реального мира отличить - а всё равно играю: суть в том, чтоб корректно разгрузить цикл, а то б я и 1 фпс оставил)

Ende 07.04.2009 21:01

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Ребят, вы тут немножко оффтопом заниметесь со своим рефреш рейтом )) Я все равно никак понять не могу, как мне организовать в игре среднюю скорость. Когда загружен мозилла, фотошоп и какая-нибудь игра - моя демка идет меееееедлеееенннооооо....... А вот если ее одну запукскать, то там все просто жутко шустро летает!! Чуть позже выложу новые скрины.

MiXaeL 07.04.2009 21:46

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Цитата:

Сообщение от Ende (Сообщение 103077)
Я все равно никак понять не могу, как мне организовать в игре среднюю скорость. .

>Еще раз внимательно и вдумчиво читаем<

ЗЫ. А еще поиск рулит. Да-да.

ABTOMAT 07.04.2009 21:59

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Впрочем факт остаётся фактом: 25 FPS явно недостаточно

Ende, коэффициент всякого обновления, зависящего от производительности умножай на коэффициент*дельта-тайм.

дельта-тайм = время смены кадров, я пользуюсь таким (псевдокод на б3д):

(просьба не ср*ть, что можно было обойтись одной переменной dt, на всё есть основания :rolleyes:)

Global dt
Начало_Цикла
cycletime = Millisecs()
Игра вместе с рендером, 2Д логикой и всё-всё-всё
dt = Millisecs() - cycletime
Конець_Цикла

Таким образом dt оказывается временем предыдущего цикла

Например: за каждый цикл сколько пикселей пролетит самолёт (напр, 100). Зависит от производительности? Да! Чем больше FPS тем больше раз произойдёт передвижение - тем дальше он сдвинется. Если передвигать не на константное значение, а на коэфф.*dt (например, если средний dt у нас 10 (грубо говоря при 100 FPS) то получим 10*dt) тогда чем больше времени прошло за рендер кадра (FPS уменьшилось) то ве увеличилось и пройденное расстояние тож -> изменение компенсировалось.

Очень важно отделить, где что зависит от dt, а где нет. В сложных формулах могут появиться квадраты и т.д. но в принципе пока я думаю у тебя такого нет. Разберись с этим, dt - крутая весчь!

Ende 07.04.2009 22:10

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Спасибо, вроде понемногу разобрался)) Сейчас рисую врагов, какими их можно сделать, я даже не представляю))

HolyDel 07.04.2009 22:11

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
я недавно пришел к выводу что dt очень красиво ложится в архитектуру игры если считать не в пикселях за цикл, а в пикселях за секунду. и вообще все параметры привязывать не к циклу и тикам а ко времени.

т.е. перезарядка ружья не 60 циклов, а 1 секунда
игрок едет вперед не на 2 еденицы за цикл, а на 100 едениц в секунду и т.д.
с учетом того что dt - это в мс. очень удобно бывает писать типа:
Код:

if(MouseDown(1) && reload_time<0)
{
Shoot();
reload_time = 1000; //1000 мс
}
reload_time -= dt;


impersonalis 07.04.2009 22:27

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
http://forum.boolean.name/showpost.p...8&postcount=20

ABTOMAT 07.04.2009 23:04

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Конечно же я имел в виду "за секунду"
Но я думаю, фабула и так ясна ;)

Randomize 09.05.2009 00:06

Ответ: Wrecking Crew & LodeRunner : Leeroy
 
Когда демка будет???
Очень хочется поиграть.
Я фанат Lode Runner.


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

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