Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Рендеринг воды и нечто вроде metaballs (http://www.flasher.ru/forum/showthread.php?t=127628)

iflamberg 21.07.2009 13:47

1) фпс флеша - штука страшно нестабильная. Причем, например, в опере - страшно нестабильная. Если сделать простую модель, где квардат перемещается на enterFrame на пиксель или два по координатной сетке - будет заметно глазу, что квардат едет дергано. Т.е. перемещать нужно не на speed на onEnterFrame, а на speed*dt, где dt=getTimer() - lastTimeUpdated.
2) Обработка математики onEnterFrame с большим fps приводит r высокой загрузке процессора. Перерисовывать чаще, чем 30 кадров в секунду - бессмысленно, но если указать 30fps в настройках, то fps может дергаться от 15 до 30. Что делать? Выставлять вменяемо большой fps(60-80), а перемещать объекты по таймеру 30 раз в секунду. Тогда имеем реальный fps 40-60, гладкое перемещение объектов на картинке и незагруженный процессор. А еще по событию таймера можно делать event.updateAfterEvent(), что теоретически позволяет обновлять экран чаще, чам fps.


Это я где-то вычитал в туторах по программированию игр на флеше. Вольный пересказ. Но сам я этим ни разу не пользовался, необходимости не было. К тому же меня гложат сомнения о целесообразности, потому что таймер во флеше такой же нестабильный, как и onEnterFrame. Вот с первым пунктом - все понятно и со всем согласен.

VVall 21.07.2009 14:00

На эту тему можно почитать вот эту статью.

Герыч 21.07.2009 14:19

В enterFrame(у меня в нём вызывается integrate() ) сделал так:

Код AS3:

var drawAfter:int=0;
...
 
public function integrate():void
{
        //тут физика
        ...
        if(getTimer()>drawAfter)
        {
                prepareDraw();
                draw();
                drawAfter=getTimer()+30//следующий кадр будет отрисован через 30мс(то есть прорисовка примерно 30 кадров/сек)
        }
        ...
}

на 200 частиц fps вырос где-то на 10-15.
На большом количестве частиц(когда реальный fps на моём компе<30) прирост пропадает.
Сейчас обновлю демки(по тем же ссылкам)

Добавлено через 10 минут
Обновил

MoHaX 21.07.2009 16:01

попробуй сделать через таймер.
и в нем все расчеты, а фпс выстави на 120.

можно будет отбалансировать тики, с которыми делать расчет.

Герыч 21.07.2009 17:00

Попробую. А зачем на 120?

MoHaX 22.07.2009 22:31

можно и меньше..
просто профайлеть лучше на сложных примерах)
так же чем больше ФПС тем точнее временные тики.

nuran 19.08.2009 15:35

Кстате про фпс:

300 частиц / 200 fps
200 частиц / 300 fps
150 частиц / 300 fps
100 частиц / 300 fps

Core 2 Quad 6600 / 3.25 Gb / GeForce 8800 Ultra


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

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.