|
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
loadClip внутри class - а
Всем привет!
Решил вынести загрузчик из кадра в класс, для удобного применения в будущем. И столкнулся с проблемами, которые мне на прямую не удалось решить. Например не удается размещать функции такого типа внутри класса oLoadListener.onLoadInit = function(mcTarget:MovieClip) Пришлось все подобные функции вложить внутрь другой функции. Но в таком случае не получается вернуть загружаемый файл из вызывающей функции. то есть clip = loaders("имя файла",container); не сработает как надо. Решил обойти возврат прямой функцией. Которая вызывает функцию _root.finish(clip) после загрузки внутри oLoadListener.onLoadInit , но это как то не правильно каждый раз к загрузке дописывать функцию вывода. Подскажите как проще сделать такой загрузчик, без костылей, что бы после загрузки возвращал загруженую картинку вызвавшей ее функции ? Вот сам код, но он больше эксперементальный чем конечный вариант. import flash.display.BitmapData; import mx.utils.Delegate; class loader_img3{ //=========================================================================================================== //- Name: Загрузчик файлов; // // Для работы класса необходимо в первую очередь запустить функцию init(); из рабочей среды // img(path,container,width,height) // path - имя файла // container - место, куда будет грузиться файл // width и height - не обязательны //=========================================================================================================== public var name_file:String; public var empty_mc:MovieClip; public var mcLoader:MovieClipLoader; public var oLoadListener:Object; public var ob:Object; public var mcload:String; public var container:MovieClip; public function init(){ ob = new Object(); ob.ind = 0; ob.ind2 = 0; ob.depth = 0; } public function img(name_file,container,WIDTH,HEIGHT){ if(WIDTH == undefined){WIDTH = 0;} if(HEIGHT == undefined){HEIGHT = 0;} ob[ob.ind] = {name:name_file,container:container,width:WIDTH,height:HEIGHT,index:ob.ind,ins:ob.ind} var obj = ob[ob.ind]; empty_mc = container.createEmptyMovieClip("mcImage_"+ob.ind, 8000+ob.ind); ob.ind++; obj.img = empty_mc; trace("empty_mc= "+empty_mc) // создаем экземпляр MovieClipLoader mcLoader = new MovieClipLoader(); // слушатель загрузки картинок oLoadListener = new Object(); // вешаем слушатель к MovieClipLoader mcLoader.addListener(oLoadListener); //var clip = loaders2(name_file,empty_mc,ob); //return obj.img; //trace("obj.copyBM= "+obj.copyBM) //trace("cclip= "+clip) } //------------------------------------------------- public function loaders2(name_file,container,ob){ mcLoader.loadClip(name_file,container); oLoadListener.onLoadProgress = function(mcTarget:MovieClip, nBytesLoaded:Number, nBytesTotal:Number):Void { trace(Math.round(nBytesLoaded / nBytesTotal * 100) + " % " + mcTarget + " загружено"); }; // эта выполнится после полной загрузки картинки oLoadListener.onLoadInit = function(mcTarget:MovieClip) { var txt:String = ""+mcTarget; if(txt.length != 0){ for(var i = 0; i <= txt.length;i++){ var txtt = txt.substring(i,i+1) if(txtt == "_"){ var number = txt.substring(i+1,txt.length) } } } var obj:Object = ob[number]; mcTarget._x = 0 mcTarget._y = 0 if(obj.width != 0){ mcTarget._width = obj.width; } if(obj.height != 0){ mcTarget._height = obj.height; } ob.ind2++; var clip = copyBitmap(obj,mcTarget, "bitmap0") trace("cclip= "+clip) //obj.copyBM = clip; _root.finish(clip) //return clip; }; function copyBitmap(obj,target:MovieClip, mc:String):MovieClip { var container = obj.container; var bmp:BitmapData = new BitmapData(target._width, target._height); bmp.draw(target); var clip:MovieClip = container._parent.createEmptyMovieClip(mc, 1000); clip.attachBitmap(bmp, 0, "none", true); return clip; } }; }; |
|
|||||
[+4 06.05.14]
|
class com.streamLoader extends MovieClip { var _obj:Object; var _clipLoader:MovieClipLoader; var _loader; public function streamLoader() { } private function _loadContent(_content, _location, _func, _ld) { _loader = _ld; if (_content != "undefined.swf") { _obj = new Object(); _clipLoader = new MovieClipLoader(); _clipLoader.addListener(_obj); _obj.onLoadProgress = mx.utils.Delegate.create(this, _loadProgress); _obj.onLoadInit = _func; _obj.onLoadStart = _start; _clipLoader.loadClip(_content,_location); } } private function _loadProgress(target_mc:MovieClip, loaded:Number, total:Number):Void { var percent:Number = Math.floor(loaded/total*100); if (typeof _loader == "movieclip") { _loader.gotoAndStop(percent); } else { _loader.text = percent; } if (loaded/total == 1) { _loader.text = ""; } } function _start(target_mc:MovieClip) { target_mc._visible = false; } |
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
ух ты как все просто, спасибо in4core.
|
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
пригляделся поближе к коду, а почему _func вынесена за пределы класса? разве через делегат она не может быть использована или хотя бы внутри класса?
|
|
|||||
Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
|
значит все таки от загрузчика не получишь сразу ответ! Как вариант прийдется такое же делать.
|
Часовой пояс GMT +4, время: 01:54. |
|
« Предыдущая тема | Следующая тема » |
|
|