![]() |
setInterval vs. onEnterFrame
Что лучше использовать, setInterval или OnEnterFrame? И при каких случаях... В моём случае массовое создание клипов (не больше 1000). Каждый клип двигается с поможу одного из этих методов. Какой лучше использовать?
|
для каждой ситуации по-разному: иногда удобно использовать onEnterFrame, иногда - setInterval.
Разница в том, что событие onEnterFrame вызывается с частотой frame rate у вашего swf, а setInterval вызывает функцию через заданный промежуток времени. |
ну да, это я знаю, но я ещё слышал что setInterval плохо работает в АС2. Может де статейка интересная есть?
|
Таймеры во Flash вообще своеобразно работают, независимо от версии AS. У них низкая точность, она зависит от браузера и даже от выставленного в ролике FPS (чем ниже, тем меньше точность).
|
тада, я заметил, но всё же не могу выбрать между этими двумя методами)
|
Цитата:
В кратце - "при высоких требованиях к плавности анимации лучше юзать setInterval т.к.:
Но вообще, alekslitvinenk прав, и даже в упомянутой выше книге, целый раздел (глава) посвящен оптимизации различных типов анимации, так что одной статейки маловато будет |
Уважаемые, подскажите, как получить значение frame rate в самом фильме и можно ли его динамически менять?
|
В AS1/AS2 нельзя никак.
|
я стараюсь почти всегда пользоваться onEnterFram'ом
setInterval как-то мне не по душе |
А что загружает больше систему?
Если только в производительности вопрос... что лучше: 10 setInterval или OnEnterFrame? |
Всегда пользуюсь setInterval, в силу того, что:
# разные составляющие анимации могут воспроизводиться с разной скоростью # независимость от FPS в проекте и продолжительности анимации Не понимаю, для чего вообще нужен onEnterFrame: пусть номинально, но он все-таки жестко диктует поведением анимированной с его помощью деталью ролика.. |
setInterval больше для анимации, а onEnterFrame для кодинга.
|
onEnterFrame можно легко первратить в setInterval(); и производительность будет куда лучше
|
Цитата:
|
это
Код AS1/AS2:
Код AS1/AS2:
|
Можно. Вопрос - зачем такие сложности?
Против: 1. Усложнение организации процессов с разными скоростями. Вот, например, у меня почти во всех проектах есть функция, которая делает плавное появление/убираение объектов на сцене. Делает это она с помощью изменения альфы и при этом используется setInterval. Ей я в качестве одного аргумента передается величина интервала. Это гибко - одни объекты появляются с одной скоростью, другие - с другой, и т.д. Зависист только от времени, которое я передаю как аргумент. А с использованием onEnterFrame придется в эту ф-ю вводить еще и дополнительные телодвижения для коррекции, так как без этого привязка будет строго к частоте кадров, и сделать быстрее-медленнее я не смогу. setInterval - пусть с оговорками - но мы можем явно задать частоту выполнения каких-либо действий, onEnterFrame - никак. 2. Необходимость в привязке к мувику или _root. Потенциальный лишний мусор на сцене. Для onEnterFrame нужен мувик-привязка (this.onEnterFrame = ..., mc1.onEnterFrame), для интервала- не нужен. Если у вас проектик небольшой - пофигу, если нет, и используются несколько периодических действий? Придется навешивать несколько onEnterFrame на разные объекты, включая this. А если это нежелательно? Или если уже все объекты заняты - придется создавать мусорные. Для достаточно сложных проектов - опять-таки - всегда нужно помнить, куда что привязано и следить, чтобы мувик с нужной функцией всегда был на сцене. 3. Остановка процесса. То же самое - с остановкой процесса. Для интервала - достаточто clearInterval. Для onEnterFrame - нужно сделать delete mc.onEnterFrame, то есть для безусловной остановки нужно удалять ссылку на описанную функцию с мувика. Можно сделать проверку выполнения условий внутри onEnterFrame, скажете вы, но вопрос - зачем таие сложности - непрерывные дополнительные вычисления? Есть еще аргументы против onEnterFrame. А что вы можете сказать "за"? Добавлено через 10 минут 4. Негибкость с параметрами. В интервальную функцию я могу легко передать параметр: Код AS1/AS2:
Код AS1/AS2:
|
ммм.... ну убедили...
но когда важна скорость, то лучше onEnterFrame использовать |
Можно понудничать? :) Контрольный выстрел:
А что значит - если нужна скорость? И какие тут достоинства у onEnterFrame? Мне правда интересно. Просто "для скорости" в интервальной функции я могу задать промежутки выполнения каких-то действий меньше частоты отрисовки кадров (хотя на флешкин таймер все ругаются, я еще правда не сталкивался), а в onEnterFrame как это сделать? |
Цитата:
Цитата:
использовал setInterval - через некоторое время начинало тормозить заюзал onEnterFrame - все прекрасно стало работать |
Цитата:
|
Допустим частота кадров низкая.
Код AS1/AS2:
Но вообще, то же самое можно сделать и для onEnterFrame, но с ухищрениями. Разве не так? К тому же данные не всегда нужны сразу на сцене, могут использоваться где-то в дальнейшем. |
Для анимации всегда использую onEnterFrame. setInterval не отрисовывает изменения без смены кадра, что может создавать рывки в движении, а вызов в разных местах updateAfterEvent дает лишнию нагрузку.
Для запуска многочисленных процессов с параметрами, используется один onEnterFrame, который пишется в класс менеджер. setInterval использую только для отложенных и несвязанных с таймлайном действий, типа: если мышка не двигается 10 секунд, то сделать это. |
Но вообще, справедливо конечно то, что от fps работа интервальной функции тоже зависит :(
Добавлено через 2 минуты Цитата:
|
Цитата:
|
iNils все верно сказал.
От себя ещё добавлю - если пойдет очень тяжелая нагрузка на процессор - упадет фпс и следовательно onEnterFrame будет вызываться реже, снижая нагрузку на процессор - и все встанет на круги своя со временем. setInterval`у же безразлично, и он может легко повесить плеер. Другой вопрос, что нельзя допускать падения фпс. |
Оба методы хороши, когда знаешь когда их применять!!!
КАк по мне.. если нужно экономить реурсы системы, всегда использую setInterval ... задал частоту срабатывания ... если тормоза есть... уменьшаешь её.... то есть позволяет легко настраивать потребление ресурсов. А для срабатывания какх-нить действий.. Цитата:
|
| Часовой пояс GMT +4, время: 14:26. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.