Форум 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=85409)

Mihcom 21.09.2006 16:44

Как снизить загрузку на процессор?
 
Всем привет.

Помогите решить следующую проблему:
Имеется Flash, который инициализируется XML-ем. Эта XML-строка передаётся в конструктор класса, который загружает кучу мувиков и отрисовывает их согласно содержимому XML. Вызов конструтора происходит из первого кадра линейки. Проблема в том, что отработка конструктора занимает секунд 10, при этом процессор грузится на 100% (проверял дома - 3.4 ГГц двухъядерный процессор грузится тоже на полную). К тому же по истечению определённого таймаута Flash-player приостанавливает его выполнение с дурацким вопросом "Ваш скрипт выполняется слишком медленно, не хотите ли его остановить?".

Я знаю количество мувиков, которые я подгружаю и отрисовываю, соответственно я попробовал сделать какой-то прелоадер, чтобы после отрисовки каждого мувика продвигать прогресс прелоадера, а в конце показать всё сразу - но фиг там!!! Флеш из-за высокой загрузки процессора ничего не рисует!!!! У меня в цикле идёт загрузка и отрисовка мувиков, и я после каждого хотел бы приостановить выполнение цикла, отрисовать прогресс, и перейти к следующему, НО ФЛЕШ НЕ ПОЗВОЛЯЕТ ТАКОГО ДЕЛАТЬ!!!!!!!! Поддерживает ли Флеш потоки? Поддерживает ли sleep для текущего потока? Есть ли аналог метода ProcessMessages - приостановить выполнение текущего потока, отрисовать всё, что нужно и продолжить выполнение? Как можно заставить Флеш не грузить процессор так сильно? Мне не нужно получить всё как можно быстрее, меня 100% устроить прелоадер + более медленная инициализация.

Я сам не Флеш-программист, просто пришлось заняться :eek: .

Заранее спасибо.

Stone 21.09.2006 19:23

боюсь тебя обмануть, но перерисовка всего происходит при каждой смене кадра (fps). и для уменьшения нагрузки придется удалять мувики.

"Ваш скрипт выполняется слишком медленно..." - прерывай цикл или что там у тебя и возобновляй его выполнение после смены кадра.

как пример

Код:

FPS=1000/12;
function onEnterFrame(){
var i=0;
var t=getTimer();
while(true){
i++;
if(getTimer()-t>FPS){break;}
}
trace('за один кадр мы '+i+' раз увеличили i на единицу');
}

при fps 12

mrspb 22.09.2006 05:29

Mihcom
забей на обычные циклы. нужно разгрузить процессор, юзай обчный трёхкадровый цикл.
обычно:
1й кадр - инициализация
2й - Итый шаг (или несколько шагов, как заметил Stone)
3й - условие выхода или повтора второго кадра

кстати, Stone, переменную надо назвать spf ;)

Leezard 22.09.2006 14:14

Цитата:

Сообщение от Mihcom
У меня в цикле идёт загрузка и отрисовка мувиков, и я после каждого хотел бы приостановить выполнение цикла, отрисовать прогресс, и перейти к следующему, НО ФЛЕШ НЕ ПОЗВОЛЯЕТ ТАКОГО ДЕЛАТЬ!!!!!!!!

Ошибаешься ФЛЕШ может многое, вот ссылочка на сйат продвинутого флэш инженера :bye: - potapenko.com
Там есть такой класс как конвеер. Конвеер позволяет разнести запуск функций во времени, останавливать поток и запускать его снова.
Используй его и будет тебе счастье.


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

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