PDA

Просмотр полной версии : Как избежать тормозов, если много объектов


Smirnoff
11.09.2005, 21:54
Задача - сделать насыщенный векторной, растровой графикой и звуками фильм (по типу что-то напоминающее презентацию с комментариями) ...
При этом загрузка процессора само собой прямо пропорциональна количеству одновременно обрабатываемых объектов ...
Убавить количество объектов на кадр проблематично ..
Проблема более-менее решаема, но от скорости воспроизведения очень сильно страдает синхронизация звука ..
Отсюда просьба - подскажите основные методы разгрузки количества одновременных событий на кадре ..
Пока пробывал такие:
1. Приаттачивал клипы из библиотеки непосредственно перед их использованием в мувике и после этого сразу remove
2. Если клип зачем-то нужен - делал его невидимым ...
3. Ставил в начало скрипта _quality = "Autolow", что вроде бы автоматически подстраивает скорость воспроизведения к мощности компьютера (правда всегда с запасом, т.е. ближе к low)
4. Резал звук на мелкие фрагменты ..
Одним словом - пока все довольно хлопотно и неэффективно.
Еще интересует какие из свойств особенно нагружают процессор.
У меня много переходов _alpha и анимаций по координатам ..
Может есть менее рессурсоемкие методы ?
И еще - не могу победить элементарный скрипт:
Нужно, чтоб мувик из библиотеки поместился на _root как непрозрачный и постепенно набрал прозрачность.
_root.attachMovie("text_1", "text_1", 0, {_x:Stage.width/2, _y:Stage.height/2, _width:400, _height:300, _alpha:10});
if (text_1._alpha<100) {
text_1._alpha++;
}
Так вот мувик появляется, но прозрачность не растет ..
P.S. Весь этот код находится внутри обработчика onEnterFrame = function {}...

kost@
11.09.2005, 23:45
Еще интересует какие из свойств особенно нагружают процессор.У меня много переходов _alpha...Попробуй сделать так: одну картинку (растровую) размером 800х600 положи поверх другой такой же и меняй прозрачность первой с помощью onEnterFrame... и ты офигеешь, как начнет тормозить твоя презентация от такой казалось бы простой анимации! Если есть - убирай!
И еще - не могу победить элементарный скрипт
У тебя каждый раз при обработке onEnterFrame происходит аттач? и ты еще удивляешься, почему не работает альфа? Делай аттач один раз вне кода обработчика onEnterFrame.

Smirnoff
12.09.2005, 06:28
Попробуй сделать так: одну картинку (растровую) размером 800х600 положи поверх другой такой же и меняй прозрачность первой с помощью onEnterFrame... и ты офигеешь, как начнет тормозить твоя презентация от такой казалось бы простой анимации! Если есть - убирай!
Есть такое дело, правда картинки поменьше ...
И как это обойти можно ?
И еще - если есть динамическое текстовое поле с изменяющейся прозрачностью, то какого размера его изначально рисовать нужно ?
Имет значение или это тоже вектор и от размера не зависит ?

У тебя каждый раз при обработке onEnterFrame происходит аттач? и ты еще удивляешься, почему не работает альфа? Делай аттач один раз вне кода обработчика onEnterFrame.
Точно ..
А как же тогда можно приаттачить клип именно к событию, которое генерируется кодом onEnterFrame ?
Невозможно в принципе ?

Dimchansky
12.09.2005, 11:06
1. Если мувик тебе не нужен, то лучше не прятать его _visible=0, т.к. флэш все равно его просчитывает. Имхо, нормальный вариант - attach/remove, или, на худой конец, изменять координаты мувика так, чтобы он уходил за пределы видимости - флэш его не обрабатывает.
2. Там, где это возможно, избавляться от анимированного растра.
3. Сглаживать вектор (особенно трассированый).
4. Если есть возможность программно анимировать клип, пользуясь координатами в массиве, а не вычисляя координаты по формуле - отдай предпочтение массиву. Если прозрачность можно сделать методами флэша (твин), а не скриптом - делай.

>А как же тогда можно приаттачить клип именно к событию, которое генерируется кодом onEnterFrame ?
Невозможно в принципе ?

Проверяй в onEnterFrame наличие твоего объекта. Ну хотя бы так:
if (typeof(text_1) == "undefined")
_root.attachMovie("text_1", "text_1", 0, {_x:Stage.width/2, _y:Stage.height/2, _width:400, _height:300, _alpha:10});
else if (text_1._alpha < 100) text_1._alpha++;

kost@
12.09.2005, 11:21
если есть динамическое текстовое поле с изменяющейся прозрачностью, то какого размера его изначально рисовать нужно? Имет значение или это тоже вектор и от размера не зависит?
Про размер: делай для динамического поля "autosize".
Про тормоза: зависит. Я тут тоже на днях парился с этим. Было здоровое динамическое поле. Менял у него прозрачность. Получалось отличное слайдшоу вместо плавной анимации... В результате анимацию убрал.
А вообще, поэкспериментируй. Если у тебя небольшие текстовые поля, то сильно тормозить не будет.

Samodelkin
12.09.2005, 11:35
Если кто еще не видел.

http://www.initclip.com/articles/0000004/

shalun
12.09.2005, 11:51
больше всего тормозов от прозрачности, особенно если прозрачные объекты движутся. Так что или прозрачность или быстрота.