Форум 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)
-   -   loadClip внутри class - а (http://www.flasher.ru/forum/showthread.php?t=142267)

NoCD 16.07.2010 16:52

loadClip внутри class - а
 
Всем привет!

Решил вынести загрузчик из кадра в класс, для удобного применения в будущем. И столкнулся с проблемами, которые мне на прямую не удалось решить.
Например не удается размещать функции такого типа внутри класса oLoadListener.onLoadInit = function(mcTarget:MovieClip)
Пришлось все подобные функции вложить внутрь другой функции.
Но в таком случае не получается вернуть загружаемый файл из вызывающей функции.

то есть clip = loaders("имя файла",container); не сработает как надо.
Решил обойти возврат прямой функцией. Которая вызывает функцию _root.finish(clip) после загрузки внутри oLoadListener.onLoadInit , но это как то не правильно каждый раз к загрузке дописывать функцию вывода. Подскажите как проще сделать такой загрузчик, без костылей, что бы после загрузки возвращал загруженую картинку вызвавшей ее функции ?

Вот сам код, но он больше эксперементальный чем конечный вариант.
Код AS1/AS2:

 
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;
}
};
};


in4core 16.07.2010 17:15

Код AS1/AS2:

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;
        }


NoCD 16.07.2010 17:23

ух ты как все просто, спасибо in4core.

in4core 16.07.2010 17:23

пользуйся ) писал давно уже

NoCD 16.07.2010 17:27

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

in4core 16.07.2010 17:51

))) Для коллбека я делаю всегда

Код AS1/AS2:

var с = new com.streamLoader();
c._loadContent("URL",_root, callBack);
 
function callBack() { trace("LOADED ALL") }


NoCD 16.07.2010 20:58

значит все таки от загрузчика не получишь сразу ответ! Как вариант прийдется такое же делать.


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

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