Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.09.2006, 16:44
Mihcom вне форума Посмотреть профиль Отправить личное сообщение для Mihcom Найти все сообщения от Mihcom
  № 1  
Ответить с цитированием
Mihcom

Регистрация: Feb 2006
Сообщений: 9
По умолчанию Как снизить загрузку на процессор?

Всем привет.

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

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

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

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

Старый 21.09.2006, 19:23
Stone вне форума Посмотреть профиль Отправить личное сообщение для Stone Найти все сообщения от Stone
  № 2  
Ответить с цитированием
Stone
 
Аватар для Stone

Регистрация: May 2001
Адрес: Москва
Сообщений: 670
боюсь тебя обмануть, но перерисовка всего происходит при каждой смене кадра (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

Старый 22.09.2006, 05:29
mrspb вне форума Посмотреть профиль Отправить личное сообщение для mrspb Найти все сообщения от mrspb
  № 3  
Ответить с цитированием
mrspb

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

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

Старый 22.09.2006, 14:14
Leezard вне форума Посмотреть профиль Отправить личное сообщение для Leezard Посетить домашнюю страницу Leezard Найти все сообщения от Leezard
  № 4  
Ответить с цитированием
Leezard
 
Аватар для Leezard

Регистрация: Oct 2004
Сообщений: 141
Цитата:
Сообщение от Mihcom
У меня в цикле идёт загрузка и отрисовка мувиков, и я после каждого хотел бы приостановить выполнение цикла, отрисовать прогресс, и перейти к следующему, НО ФЛЕШ НЕ ПОЗВОЛЯЕТ ТАКОГО ДЕЛАТЬ!!!!!!!!
Ошибаешься ФЛЕШ может многое, вот ссылочка на сйат продвинутого флэш инженера - potapenko.com
Там есть такой класс как конвеер. Конвеер позволяет разнести запуск функций во времени, останавливать поток и запускать его снова.
Используй его и будет тебе счастье.

Создать новую тему Ответ Часовой пояс GMT +4, время: 22:05.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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