Просмотр полной версии : сообщение о медленном скрипте
использую MovieClipLoader чтобы загрузить мувик.
специально выложил работу в нет и подгружаемый ролик сделал достаточно большим.
когда подгружаемый ролик грузится (занимает минут 5) вылазит окно "Скрипт вызывает медленную работу скрипта... Прервать/Продолжить". успевает вылезти несколько раз.
Можно это окно как-то подавить?
эмм... это класс.... и будет простыня... ну ладно...
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 метров, осторожно!), только это дурацкое окошко о медленном скрипте вылазит. что делает:
начинает подгрузку мувика. когда подгрузка доходит до определенного кадра начинает отображать прелоадер и подгружаемый мувик в этом кадре, затемнив предварительно мувик в черный цвет. когда загрузка закончена - убирает затемнение мувика и прячет прелоадер.
Ни каких окошков у меня не вылезло. Вообще такое окно появляется, когда время на обработку скрипта превышает заданное ограничение (либо это бесконечный цикл, либо трудоемкие вычисления). Изменить это время в самом флеше нельзя. Поэтому стоит еще раз пересмотреть ваш код и попытаться найти то место которое вызывает, то что я описал в скобках.
видимо у вас машинка мощнее, чем у меня. или мне надо позакрывать лишних окон.
если я убераю вот эту проверку:
if (!this.isTransformed && mov._framesloaded>this.cell.start_idle2 &&
((this.cell.side==0 && ...
то сообщение не вылазит. попробовал упростить проверку, сделав ее двухуровневой. появляется реже иногда вообще не появляется. думаю сделать два обработчика - первый будет с этой самой проверкой и после ее выполнения будет назначать второй обработчик вместо себя. изврааат %(
А зачем вам проверять _framesloaded? есть событие onLoadInit, и проверка вообще не нужна.
а как я определю, что все необходимые кадры для проигрывания первой анимации загружены и я ее могу показать?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.