Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как избежать тормозов, если много объектов (http://www.flasher.ru/forum/showthread.php?t=69021)

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

Цитата:

Сообщение от Smirnoff
Еще интересует какие из свойств особенно нагружают процессор.У меня много переходов _alpha...

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

Сообщение от Smirnoff
И еще - не могу победить элементарный скрипт

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

Smirnoff 12.09.2005 06:28

Цитата:

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

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

Цитата:

Сообщение от kost@
У тебя каждый раз при обработке 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

Цитата:

Сообщение от Smirnoff
если есть динамическое текстовое поле с изменяющейся прозрачностью, то какого размера его изначально рисовать нужно? Имет значение или это тоже вектор и от размера не зависит?

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

Samodelkin 12.09.2005 11:35

Если кто еще не видел.

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

shalun 12.09.2005 11:51

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


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

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