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

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

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

Регистрация: Feb 2006
Сообщений: 9
Question Перерисовка компонента

Добрый день.

В скрипте мне нужно в цикле выполнять некие действия, которые занимают довольно длительное время, и я хотел бы информировать пользователя о прогрессе выполнения. Для этого я использую встроенный флешовый ProgressBar, и в цикле увеличиваю его значение. Проблема заключается в том, что из-за высокой нагрузки процессора во время выполения скрипта (до 100%) ProgressBar просто не успевает перерисовываться.

Как мне указать флешу, чтобы он прорисовал ProgressBar, и только после этого приступил к следующей итерации цикла? Т.е. мне нужен, если кому известно, аналог Application.ProcessMessages из Delphi. Функции sleep() или аналога я тоже не нашёл - можно было бы попробовать приостановить выполнение скрипта на несколько милисекунд - по идее, флеш должен был бы высвободившееся процессорное время потратить на прорисовку ProgressBar.

В общем, подскажите

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

Регистрация: Nov 2005
Сообщений: 221
Используй связку onEnterFrame(или setInterval) и for.
Код:
this.maxIteration = 100000;
this.curIteration = 5000;
this.count = 0;
this.maxCount = this.maxIteration/this.curIteration;
this.onEnterFrame = function(){
    var p = (100*count)/this.maxCount;
    preload_bar._xscale = p;
    for(var i=0; i<this.curIteration; ++i){
        //...
    }
    this.count++;
    if(this.count == this.maxCount) delete this.onEnterFrame;
}
сорри не тестил...

Старый 23.03.2006, 20:13
Mihcom вне форума Посмотреть профиль Отправить личное сообщение для Mihcom Найти все сообщения от Mihcom
  № 3  
Ответить с цитированием
Mihcom

Регистрация: Feb 2006
Сообщений: 9
Спасибо. Так заработало. Только МЕДЛЕННО. Пытался выставить 24 или 36 FPS для флешки - метод отчего-то не стал вызываться быстрее. Вариант с setInterval не получился - setInterval постоянно возвращает undefined (я из метода класса создал функцию functionName в _root, и пытался на неё навесить setInterval - не помогло ни _root.functionName, ни просто functionName; также не удалось навесить setInterval на метод класса - что, впрочем, и неудивительно).

Как бы мне ускорить выполение? Не поддерживает ли Flash многопоточность?

Старый 23.03.2006, 21:04
KPaul вне форума Посмотреть профиль Отправить личное сообщение для KPaul Найти все сообщения от KPaul
  № 4  
Ответить с цитированием
KPaul
 
Аватар для KPaul

Регистрация: Nov 2005
Сообщений: 221
1. Увеличение fps в пропертях должно непосредственно оказывать влияние на onEnterFrame, если конечно комп нормальный.
Можно увеличить значение curIteration.
Что значит медленно? Сколько итераций в цикле?

2. Флеш не поддерживает многопоточность, хотя есть надежда на 9. Но можно моделировать с помощью внешней архитектуры
(2 swf & LocalConnection).

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

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

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


 


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


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