Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Общие вопросы о Flash (не затрагивающие ActionScript) (http://www.flasher.ru/forum/forumdisplay.php?f=60)
-   -   сообщение о медленном скрипте (http://www.flasher.ru/forum/showthread.php?t=94639)

Chas 17.04.2007 05:55

сообщение о медленном скрипте
 
использую MovieClipLoader чтобы загрузить мувик.
специально выложил работу в нет и подгружаемый ролик сделал достаточно большим.
когда подгружаемый ролик грузится (занимает минут 5) вылазит окно "Скрипт вызывает медленную работу скрипта... Прервать/Продолжить". успевает вылезти несколько раз.
Можно это окно как-то подавить?

iNils 17.04.2007 05:58

Скрипт покажите.

Chas 17.04.2007 06:02

эмм... это класс.... и будет простыня... ну ладно...
Код:

class game.Cell extends MovieClip{
        var isPlayer; //флаг, является ли клетка клеткой игрока
        var isChar; //определяет является ли клетка клеткой с чаром
        var isEnemy; //атакуемая клетка
        var preloader,model,cursor:MovieClip;
        var side,row,pos:Number;
        var start_idle1,end_idle1,start_idle2,end_idle2,start_attack1,end_attack1,start_attack2,end_attack2;
        function Cell (){
                      //здесь была инициализация переменных
        }
          //по вызову - загружаем модель
        function loadModel (modelname){
                this.model._alpha=0;  //делаем модель на время загрузки невидимой
                var mcl=new MovieClipLoader ();
                var listener=new Object ();
                listener.isTransformed=0; //флаг определяет затемнили ли мы модельку или нет
                listener.cell=this;
                listener.model=this.model;
                listener.preloader=this.preloader;
                listener.onLoadProgress = function (mov,loaded,total){
                        if (!this.isTransformed && mov._framesloaded>this.cell.start_idle2 &&
                                ((this.cell.side==0 && mov._framesloaded>=this.cell.start_idle1) ||
                                  (this.cell.side==1 && mov._framesloaded>=this.cell.start_idle2))){
                                this.isTransformed=1;
                                mov.gotoAndStop (this.cell.side==0?this.cell.start_idle1:this.cell.start_idle2);
                                var c=new flash.geom.ColorTransform(); c.redMultiplier=0; c.greenMultiplier=0;c.blueMultiplier=0;
                                mov.transform.colorTransform=c; //делаем модельку видимой,но черного цвета и с нужной ориентацией
                                this.preloader._visible=true; //делаем и прелоадер видимым
                        }
                        this.preloader.gotoAndStop (Math.round(loaded/(total/100)));
                }
                listener.onLoadComplete=function (mov){
                        var c=new flash.geom.ColorTransform();
                        mov.transform.colorTransform=c; //делаем модельку видимой обычного цвета
                        this.preloader._visible=false; //прячем прелоадер
                }
                mcl.addListener(listener);
                mcl.loadClip ("data/models/"+modelname+".swf",this.model);
        }
}

несколько коментариев:
функция loadModel и выполняет подгрузку мувика, внутри себя создавая приемник для событий.
код работает, выложен на http://www.crimea.com/~chas/celltest.swf (внимание! подгружает 8 метров, осторожно!), только это дурацкое окошко о медленном скрипте вылазит. что делает:
начинает подгрузку мувика. когда подгрузка доходит до определенного кадра начинает отображать прелоадер и подгружаемый мувик в этом кадре, затемнив предварительно мувик в черный цвет. когда загрузка закончена - убирает затемнение мувика и прячет прелоадер.

iNils 17.04.2007 06:28

Ни каких окошков у меня не вылезло. Вообще такое окно появляется, когда время на обработку скрипта превышает заданное ограничение (либо это бесконечный цикл, либо трудоемкие вычисления). Изменить это время в самом флеше нельзя. Поэтому стоит еще раз пересмотреть ваш код и попытаться найти то место которое вызывает, то что я описал в скобках.

Chas 17.04.2007 07:07

видимо у вас машинка мощнее, чем у меня. или мне надо позакрывать лишних окон.
если я убераю вот эту проверку:
Код:

if (!this.isTransformed && mov._framesloaded>this.cell.start_idle2 &&
                                ((this.cell.side==0 && ...

то сообщение не вылазит. попробовал упростить проверку, сделав ее двухуровневой. появляется реже иногда вообще не появляется. думаю сделать два обработчика - первый будет с этой самой проверкой и после ее выполнения будет назначать второй обработчик вместо себя. изврааат %(

Kikasso 17.04.2007 09:39

А зачем вам проверять _framesloaded? есть событие onLoadInit, и проверка вообще не нужна.

Chas 17.04.2007 09:42

а как я определю, что все необходимые кадры для проигрывания первой анимации загружены и я ее могу показать?


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

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