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

Mihcom 23.03.2006 17:47

Перерисовка компонента
 
Добрый день.

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

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

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

KPaul 23.03.2006 18:31

Используй связку 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;
}

сорри не тестил...

Mihcom 23.03.2006 20:13

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

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

KPaul 23.03.2006 21:04

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

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


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

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