Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   UpdateScene and RenderScene (http://www.flasher.ru/forum/showthread.php?t=170222)

dimarik 21.10.2011 10:20

Только не через таймер. Я предупредил.

З.Ы. Секунда будит [x]

BuKT 21.10.2011 10:27

Цитата:

В место "Event.ENTER_FRAME" советую использовать "TimerEvent.TIMER" с "updateAfterEvent();".
Вопрос из зала: updateAfterEvent() вызывает EnterFrame или просто производит те же операции, что и вхождение в кадр? Иными словами - необходимо ли мне вызывать каждый раз camera.render() когда тикнул таймер, или оно сделает это самостоятельно, т.к. рендер камеры подписан на энтерфрейм?

crazyone 21.10.2011 21:05

Насколько я понимаю, таймер с updateAfterEvent() заставляет плеер отрисовывать содержимое не только во время, когда начинается кадр, но и в то время, когда срабатывает таймер. Каким образом это может увеличить производительность?

Я еще понимаю, если у нас в приложении нет обычной анимации, а только програмная - ок, ставим фреймрейт в значение "1" и таймер даст нам больше производительности за счет отсутствия всякого функционала кадра типа фаз, вещания разных событий и т.д.
То, что возможностей больше - это конечно да, удобненько.

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

derhab 21.10.2011 21:28

Цитата:

Сообщение от crazyone (Сообщение 1040925)
Насколько я понимаю, таймер с updateAfterEvent() заставляет плеер отрисовывать содержимое не только во время, когда начинается кадр, но и в то время, когда срабатывает таймер. Каким образом это может увеличить производительность?
Но чтобы заявлять, что рендер нужно вешать исключительно на таймер - нужно привести побольше аргументов.

Плеер отрисовывает не когда "начинается кадр", а во второй фазе, когда выполнен весь код для текущего кадра. А updateAfterEvent() заставляет плеер производить внеплановую дополнительную отрисовку, что конечно, приведет к значительной потере производительности

crazyone 21.10.2011 23:31

Да, согласен, сначала код, потом рендер. Ошибся.

dimarik 22.10.2011 00:09

Цитата:

Сообщение от derhab (Сообщение 1040929)
Плеер отрисовывает не когда "начинается кадр", а во второй фазе, когда выполнен весь код для текущего кадра.

Скорее, в некоторой по счету фазе, которая наступает по прошествии (нескольких) фаз "выполнение кода в текущем кадре". Не забываем о событиях.

derhab 22.10.2011 00:16

Цитата:

Сообщение от dimarik (Сообщение 1040982)
Не забываем о событиях.

вечная память)

stweet 22.10.2011 10:39

Возможно я поспешил с выводами о ENTER_FRAME && TIMER т.к. получилось высказать сугубо личное мнение но и мнение сложилось с огромной пачки советов во время познания тонкостей оптимизации.

В первую очередь "в своё оправдание =)" хочу предложить прочитать главу "Программная анимация" ст.677 из книги К.Мука "AS3 Подробное руководство". Там как раз замечательно описывается в каких случаях и какой метод использовать. Я не отрицал ENTER_FRAME, вероятно я привел пример на TIMER т.к. сам пользуюсь только им. В общем я не использую в своих приложениях ENTER_FRAME, никогда. Все приложения которые я написал работают только на ОДНОМ TIMER-е, для многих думаю это удивительно но факт. Вопрос как можно одновременно использовать кучу анимационных объектов затронув всего один TIMER?
Вот тут на помощь приходит знания оптимизации. Которые можно черпнуть из таких книг как "Совершенный код", "300 рецептов AS3", "Оптимизация - советы профессионалов AS3". Своими словами я тут до седины буду расписывать как, что и зачем, по этому порекомендовал книги. Но на своём опыте я убедился в том что на любое приложение достаточно в основном классе зарегистрировать все один раз таких слушателей как:
Код AS3:

stage.addEventListener(MouseEvent.MOUSE_DOWN, MOUSE_DOWN);
stage.addEventListener(MouseEvent.MOUSE_UP, MOUSE_UP);
stage.addEventListener(MouseEvent.MOUSE_OVER, MOUSE_OVER);
stage.addEventListener(MouseEvent.MOUSE_OUT, MOUSE_OUT);
timer.addEventListener(TimerEvent.TIMER, TIMER);

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

Zebestov 22.10.2011 15:07

С каких это пор таймер для анимации стал лучше, чем ENTER_FRAME, который, к тому же, "всегда есть уже" хочешь ты того или нет?

stweet 22.10.2011 17:07

Интересно, аргументы в пользу ENTER_FRAME(А)? На самом деле, стало интересно, как организуют анимации за счёт ENTER_FRAME(А), чем выигрывает такой подход?


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

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