Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Подгрузка картинок в цикле (http://www.flasher.ru/forum/showthread.php?t=117542)

AlexDesinger 29.10.2008 21:11

Подгрузка картинок в цикле
 
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import fl.transitions.Tween;
        import fl.transitions.easing.*;

        public class LoaderExample extends Sprite {

                private var url:String;
                private var mc:MovieClip;
                private var i:int;
                private var loader:Loader;


                public function LoaderExample() {

                        for (i=1; i<11; i++) {
                                url="ico/ico"+i+".jpg";
                                loader = new Loader();
                                mc = new MovieClip();
                                configureListeners(loader.contentLoaderInfo);
                                loader.addEventListener(MouseEvent.CLICK, clickHandler);

                                var request:URLRequest = new URLRequest(url);
                                loader.load(request);
                                mc.addChild(loader);

                                addChild(mc);
                                mc.alpha=0;
                                mc.x=+10
                        }
                }

                private function configureListeners(dispatcher:IEventDispatcher):void {
                        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
                        dispatcher.addEventListener(Event.INIT, initHandler);
                        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                        dispatcher.addEventListener(Event.OPEN, openHandler);
                        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                        dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
                }

                private function completeHandler(event:Event):void {
                        trace("completeHandler: " + event);

                }

                private function httpStatusHandler(event:HTTPStatusEvent):void {
                        trace("httpStatusHandler: " + event);
                }

                private function initHandler(event:Event):void {
                        trace("initHandler: " + event);
                        var twa:Tween = new Tween(mc,"alpha",Strong.easeOut,0,100,10000,false);
                }

                private function ioErrorHandler(event:IOErrorEvent):void {
                        trace("ioErrorHandler: " + event);

                }

                private function openHandler(event:Event):void {
                        trace("openHandler: " + event);
                }

                private function progressHandler(event:ProgressEvent):void {
                        trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
                }

                private function unLoadHandler(event:Event):void {
                        trace("unLoadHandler: " + event);
                }

                private function clickHandler(event:MouseEvent):void {
                        trace("clickHandler: " + event);
                        var loader:Loader = Loader(event.target);
                }
                private function visibleTrue(event:Event):void {

                }
        }
}

Народ, помогите, я взял пример из helpa loader а который грузит картинку.
Но мне нужно в цикле создать несколько мувиков, в каждый из них подгрузить картинку и сдвинуть ее вниз...
но у меня почему то загружается только последняя картинка...в as3 новичок, так что не пинайте
Я так понял нужно к каждому мувику прицепить лоадер, но не могу пока сообразить как это сделать...
И еще так понимаю что все действия с мувиком такие как прицепить слушателя и сдвинуть и т.п нужно делать при инициализации...привожу весь код, потому что не уверен даже что все пакеты импортированы какие нужны...

_Smirnoff 29.10.2008 22:00

Создаешь одну процедуру загрузки.На complete и failure вешаешь запуск этой же процедуры и считаешь кол-во загрузок...

Felicast 29.10.2008 22:10

в вашем коде все загрузки начинаются параллельно. это не есть хорошо (так как в виндовз поумолчанию одновременно можно открыть не более 10 tcp соединени.)
к томуже не совсем понятна роль mc. попробуйте добавлять прямо на сцену.
если не поможет, попробуй что-то типа этого.
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import fl.transitions.Tween;
        import fl.transitions.easing.*;

        public class LoaderExample extends Sprite {

                private var url:String;
                private var i:int;
                private var curX:int;
                private var loader:Loader;


                public function LoaderExample() {
                        i = 1;
                        curX = 0;
                        url="ico/ico"+i+".jpg";
                        loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                        var request:URLRequest = new URLRequest(url);
                        loader.load(request);
                }

                private function completeHandler(event:Event):void {
                        trace("completeHandler: " + event);
                        var tmp:DisplayObject = event.target as DisplayObject;
                        addChild(tmp);
                        //здесь надо листенер удалить!!!! не буду врать - не помню как:)
                        ++i;
                        loader = new Loader();
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);
                        var request:URLRequest = new URLRequest(url);
                        loader.load(request);
                }
        }
}

не проверял. может работать не будет. флеша под рукой нет.

Rzer 30.10.2008 00:15

Сегодня всем пишу про BulkLoader :)

mre 30.10.2008 00:44

А что дальше?
addChild через фреймворк?

AlexDesinger 30.10.2008 01:13

спасибо, большое, вроде как получилось:
Код:

public class LoaderExample extends Sprite {

                private var url:String;
                private var mc:MovieClip;
                private var i:int;
                private var loader:Loader;
                private var prevX:int;


                public function LoaderExample() {

                        i=1;
                        prevX=0
                        ;
                        url="ico/ico"+i+".jpg";
                        loader = new Loader();
                        mc = new MovieClip();
                        configureListeners(loader.contentLoaderInfo);
                        loader.addEventListener(MouseEvent.CLICK, clickHandler);

                        var request:URLRequest=new URLRequest(url);
                        loader.load(request);
                        mc.addChild(loader);

                        addChild(mc);
                        mc.alpha=1;
                        mc.x=prevX;
                        loader.unload();

                }

                private function configureListeners(dispatcher:IEventDispatcher):void {
                        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
                        dispatcher.addEventListener(Event.INIT, initHandler);
                        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                        //dispatcher.addEventListener(Event.OPEN, openHandler);
                        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                        //dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
                }

                private function completeHandler(event:Event):void {
                        //trace("completeHandler: " + event);
                        if (i<3) {
                                i++;
                                url="ico/ico"+i+".jpg";
                                loader = new Loader();
                                mc = new MovieClip();
                                configureListeners(loader.contentLoaderInfo);
                                loader.addEventListener(MouseEvent.CLICK, clickHandler);

                                var request:URLRequest=new URLRequest(url);
                                loader.load(request);
                                mc.addChild(loader);

                                addChild(mc);
                                mc.alpha=1;
                                mc.x=prevX+100;
                                prevX=mc.x;
                                loader.unload();
                        }
                }

                private function httpStatusHandler(event:HTTPStatusEvent):void {
                        //trace("httpStatusHandler: " + event);
                }

картинки грузятся, все ок... меня только напрягает двойной код в главной функции и при событии complete это так и должно быть или можно как нть покрасивее написать?
и еще вопрос как мне твин сделать - появление картинок при загрузке а то я могу ток объявить один только и он естесствеено не успев осуществиться объявляется еще раз и картинки получаются с разной альфой

Цитата:

Сегодня всем пишу про BulkLoader
Эээ не надо так издеваться над новичками - я с ума сойду прежде чем разберусь....

Alex Lexcuk 30.10.2008 01:44

>>картинки грузятся, все ок... меня только напрягает двойной код в главной функции и при событии complete это так и должно быть или можно как нть покрасивее написать?
и еще вопрос как мне твин сделать - появление картинок при загрузке а то я могу ток объявить один только и он естесствеено не успев осуществиться объявляется еще раз и картинки получаются с разной альфой
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.ui.Mouse;
        import flash.text.*;
        import flash.net.*;
        import fl.transitions.Tween;
        import fl.transitions.TweenEvent;
        import fl.transitions.easing.*;

        public class Doc extends Sprite {
                var loader:Loader;
                var req:URLRequest;
                var count:int;
                var position:int;
                var path:String;
                var arr:Array;
                var sp:Sprite;
                var tween:Tween;
                var tr:Boolean;
                var i:int;
                function Doc() {
                        path = 'http://www.dnadillo.dn.ua/images/imag/';
                        arr = [
                          'magna_17_1024.jpg','magna_33_1024.jpg',
                          'magna_carta_078.JPG','magna_carta_115.JPG',
                          'magna_carta_126.JPG','magna_carta_127.JPG',
                          'magna_carta_131.JPG','magna_carta_133.JPG',
                          'magna_carta_140.JPG','magna_carta_141.JPG',
                          'magna_carta_144.JPG'
                          ];
                        req = new URLRequest();
                        count = 0;
                        position = 0;
                        tr = false;
                        onward();
                        tween = new Tween({i:0}, "i", Regular.easeOut, 0, 1, 10, true);
                        tween.stop();
                        tween.addEventListener(TweenEvent.MOTION_CHANGE, handleChange);
                        tween.addEventListener(TweenEvent.MOTION_FINISH, fin);
                }
                function got(evt:Event) {
                        sp = new Sprite();
                        sp.addChild(loader);
                        addChild(sp);
                        sp.alpha = 0;

                        count++;
                        trace('комплект');
                        onward();
                        if (tr==false) {
                                tr = true;
                                tween.start();
                        }
                }
                function ioErrorHandler(event:IOErrorEvent):void {
                        count++;
                        trace('Ошибка');
                        onward();
                }
                function onward() {
                        if (count < arr.length) {
                                trace('Гружу');
                                loader=new Loader();
                                req.url=path + arr[count];
                                loader.load(req);
                                loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
                                loader.contentLoaderInfo.addEventListener(Event.COMPLETE,got);
                        }
                }
                function handleChange(evt:TweenEvent):void {
                        //tween.obj.i;
                        for (i=0; i<this.numChildren; i++) {
                                if (i==position) {
                                        sp = this.getChildAt(i) as Sprite;
                                        trace(sp);
                                        sp.alpha = tween.obj.i;
                                }
                               
                        }
                }
                function fin(evt:TweenEvent):void {
                        position++;
                        tween.start();
                        trace('Конец');
                }
        }
}


AlexDesinger 30.10.2008 04:13

Alex Lexcuk, спасибо за пример оч красиво...
Народ, у меня все получилось, даже с твином внешне все выглядет вроде ничего, но главная проблема сейчас для меня зпихнуть этот лоадер в отдельный класс...

я делаю так:
Код:

Main.as
package {

        import LoaderExample

......
        public class Main extends MovieClip {
public function Main() {

                        var lp:LoaderExample= new LoaderExample()
............

И собственно не понимаю почему, но картинки не отображаются...трэйсом выводится mc.x totalByte и т.д. но реально их не видно, а если закинуть код в главный класс, то все грузится как надо...подскажите

Alex Lexcuk 30.10.2008 09:39

Можно вынести легко код загрузщика в отдельный класс
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.ui.Mouse;
        import flash.text.*;
        import flash.net.*;
        import fl.transitions.Tween;
        import fl.transitions.TweenEvent;
        import fl.transitions.easing.*;

        public class Doc extends Sprite {
                var loader:FerryLoader;
                var count:int;
                var position:int;
                var path:String;
                var arr:Array;
                var sp:Sprite;
                var tween:Tween;
                var tr:Boolean;
                var i:int;
                function Doc() {
                        path = 'http://www.dnadillo.dn.ua/images/imag/';
                        arr = [
                          'magna_17_1024.jpg','magna_33_1024.jpg',
                          'magna_carta_078.JPG','magna_carta_115.JPG',
                          'magna_carta_126.JPG','magna_carta_127.JPG',
                          'magna_carta_131.JPG','magna_carta_133.JPG',
                          'magna_carta_140.JPG','magna_carta_141.JPG',
                          'magna_carta_144.JPG'
                          ];
                        count = 0;
                        position = 0;
                        tr = false;
                        loader = new FerryLoader(this);
                        loader.urlTrain(path+arr[count]);
                        tween = new Tween({i:0}, "i", Regular.easeOut, 0, 1, 10, true);
                        tween.stop();
                        tween.addEventListener(TweenEvent.MOTION_CHANGE, handleChange);
                        tween.addEventListener(TweenEvent.MOTION_FINISH, fin);
                }
                function onward() {
                        sp = this.getChildAt(this.numChildren-1) as Sprite;
                        sp.alpha = 0;
                        count++;
                        if (count < arr.length) {
                                loader.urlTrain(path+arr[count]);
                                if (tr==false) {
                                        tr = true;
                                        tween.start();
                                }
                        }
                }
                function handleChange(evt:TweenEvent):void {
                        //tween.obj.i;
                        for (i=0; i<this.numChildren; i++) {
                                if (i==position) {
                                        sp = this.getChildAt(i) as Sprite;
                                        trace(sp);
                                        sp.alpha = tween.obj.i;
                                }
                        }
                }
                function fin(evt:TweenEvent):void {
                        position++;
                        tween.start();
                        trace('Конец');
                }
        }
}

И класс загрузщика
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.ui.Mouse;
        import flash.text.*;
        import flash.net.*;
        import fl.transitions.Tween;
        import fl.transitions.TweenEvent;
        import fl.transitions.easing.*;

        public class FerryLoader extends URLLoader {
                var req:URLRequest;
                var loader:Loader;
                var doc:Doc;
                var sp:Sprite;
                function FerryLoader(_doc:Doc) {
                        doc=_doc;
                        req=new URLRequest();
                        dataFormat= URLLoaderDataFormat.BINARY;
                        addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
                        addEventListener(Event.COMPLETE,got);

                }
                function urlTrain(_str:String) {
                        req.url=_str;
                        try {
                                load(req);
                        } catch (error:Error) {
                                trace("Unable to load requested document.");
                        }
                }
                function got(evt:Event) {
                        loader = new Loader;
                        loader.loadBytes(this.data);

                        sp=new Sprite();
                        sp.addChild(loader);
                        doc.addChild(sp);
                        doc.onward();
                }
                function ioErrorHandler(event:IOErrorEvent):void {
                        trace('Ошибка');
                        doc.onward();
                }
        }
}


AlexDesinger 31.10.2008 01:48

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

на всякий случай напишу то что у меня сейчас есть

Main.as
Код:

Main.as
package {

        import LoaderExample

......
        public class Main extends MovieClip {
public function Main() {

                        var lp:LoaderExample= new LoaderExample()
............

LoaderExample.as
Код:

package {
        import flash.display.*;
        import flash.events.*;
        import flash.net.URLRequest;
        import fl.transitions.Tween;
        import fl.transitions.easing.*;

        public class LoaderExample extends MovieClip {

                private var url:String;
                private var mc:MovieClip;
                private var c:int;
                private var loader:Loader;
                private var prevvXX:int;
                //private var twa:Tween;

                public function LoaderExample() {
                        c=1;
                        prevvXX=0
                        ;
                        url="ico/ico"+c+".jpg";
                        loader = new Loader();
                        mc = new MovieClip();
                        configureListeners(loader.contentLoaderInfo);
                        loader.addEventListener(MouseEvent.CLICK, clickHandler);

                        var request:URLRequest=new URLRequest(url);
                        loader.load(request);
                        mc.addChild(loader);

                        addChild(mc);
//                        mc.alpha=1
                        mc.x=prevvXX;
                        mc.y=100;
                        //twa=new Tween(mc,"alpha",Strong.easeOut,0,1,100,false);
                        loader.unload();
                        trace(mc.width)
                }

                private function configureListeners(dispatcher:IEventDispatcher):void {
                        dispatcher.addEventListener(Event.COMPLETE, completeHandler);
                        dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
                        dispatcher.addEventListener(Event.INIT, initHandler);
                        dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
                        dispatcher.addEventListener(Event.OPEN, openHandler);
                        dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                        //dispatcher.addEventListener(Event.UNLOAD, unLoadHandler);
                }

                private function completeHandler(event:Event):void {
                        //trace("completeHandler: " + event);
                        if (c<3) {
                                c++;
                                url="ico/ico"+c+".jpg";
                                loader = new Loader();
                                mc = new MovieClip();
                                configureListeners(loader.contentLoaderInfo);
                                loader.addEventListener(MouseEvent.CLICK, clickHandler);

                                var request:URLRequest=new URLRequest(url);
                                loader.load(request);
                                mc.addChild(loader);

                                addChild(mc);
                                mc.alpha=100;
                                mc.x=prevvXX+100;
                                mc.y=100;
                                prevvXX=mc.x;
                                loader.unload();
                                //twa=new Tween(mc,"alpha",Strong.easeOut,0,1,100,false);
                        }
                }

                private function httpStatusHandler(event:HTTPStatusEvent):void {
                        //trace("httpStatusHandler: " + event);
                }

                private function initHandler(event:Event):void {
                        //trace("initHandler: " + event);
                }

                private function ioErrorHandler(event:IOErrorEvent):void {
//                        trace("ioErrorHandler: " + event);

                }

                private function openHandler(event:Event):void {
                        //trace("openHandler: " + event);
                }

                private function progressHandler(event:ProgressEvent):void {
                        trace("progressHandler: bytesLoaded=" + event.bytesLoaded + " bytesTotal=" + event.bytesTotal);
                }

                private function unLoadHandler(event:Event):void {
                        //trace("unLoadHandler: " + event);
                }

                private function clickHandler(event:MouseEvent):void {
                        //trace("clickHandler: " + event);
//                        var loader:Loader=Loader(event.target);
                }
        }
}



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

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