Форум 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=174277)

sneltyn 21.01.2012 17:46

Внешний прелоадер
 
Здравствуйте! Сделал внешний прелоадер для swf файла, но в этой swf есть загружаемые данные из xml? И когда делаю внешний прелоадер, то это не учитывается, как быть из-за этого swf подгружается раньше чем нужно и весь контент не успевает загрузиться он грузиться после того как уже появилась swf! Как быть в этом случае?

Deimos747 21.01.2012 18:03

Сейчас вы похоже используете событие Complete. В подгружаемой swf создайте событие CompleteXml и его посылайте, по окончании загрузки xml. В прелоадере вешайте слушатель CompleteXml на подгруженную флешку, после того как придёт INIT и вы сможете подключиться к флешке. Как то так...

sneltyn 21.01.2012 18:16

Да использую Complete вот так:

Код AS3:

function loadXML(file:String):void{
        var xmlLoader:URLLoader = new URLLoader();
        xmlLoader.load(new URLRequest(file));
        xmlLoader.addEventListener(Event.COMPLETE, comleteLoading);
 
}
function comleteLoading(e:Event):void{
        xml = XML(e.target.data);
        xmlList = xml.children();
        trace(xml);
        removeChild(completeLoad);
        loadMenus();
}


Deimos747 21.01.2012 18:33

Код AS3:

function comleteLoading(e:Event):void{
        dispatchEvent("xmlComplete");//ловите его в прелоадере, это и будет полной загрузкой
        xml = XML(e.target.data);
        xmlList = xml.children();
        trace(xml);
        removeChild(completeLoad);
        loadMenus();
}


sneltyn 21.01.2012 19:58

Выдает ошибку! Монтажный кадр 1, слой "AS", кадр 1, строка 58 1067: Неявное приведение значения типа String к несоответствующему типу flash.events:Event.

КорДум 21.01.2012 20:24

Код AS3:

dispatchEvent(new Event("xmlComplete"));


sneltyn 21.01.2012 20:44

А что писать в лоадере, я с dispatchEvent еще не работал!

КорДум 21.01.2012 20:49

Код AS3:

_loader.content.addEventListener("xmlComplete" /* надо вынести в константу */, handler);


sneltyn 21.01.2012 20:57

Код AS3:

import flash.display.Loader;
import flash.net.URLRequest;
var xml:XML;
var xmlList;
var loader:Loader = new Loader();
var _loader:Loader = new Loader();
 
 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
 
loader.load(new URLRequest("experement.swf"));
function onComplete(e:Event):void{
        _loader.content.addEventListener("xmlComplete", handler);
}
 
function handler():void{
trace("Загрузка завершена, можно поместить на сцену.");
addChild(loader);
 
}
 
 
function onProgress(e:ProgressEvent):void
{
trace("Загрузка "+ e.target.bytesLoaded + "/"+e.target.bytesTotal);
}

Выдает в выводе TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at experement_fla::MainTimeline/frame1()
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at loader_fla::MainTimeline/onComplete()

КорДум 21.01.2012 21:01

Код AS3:

var loader:Loader = new Loader();
var _loader:Loader = new Loader();

Вы сами запутались в этих переменных. Исправляйте.

sneltyn 21.01.2012 21:06

Исправил, но это же на ошибку ни как не повлияло!

Добавлено через 12 минут
Возможно ошибка из-за того, что я не в классе пишу а в кадрах?

КорДум 21.01.2012 21:28

Покажите исправленный код. На какую строчку ругается?

sneltyn 21.01.2012 21:35

Код AS3:

import flash.display.Loader;
import flash.net.URLRequest;
var xml:XML;
var loader:Loader = new Loader();
var loaderXML:Loader = new Loader();
 
loader.load(new URLRequest("experement.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
 
 
function onComplete(e:Event):void{
        trace('load');
        loaderXML.addEventListener("xmlComplete", handler);
}
 
function handler():void{
        trace("Загрузка завершена, можно поместить на сцену.");
        addChild(loader);
}
 
 
function onProgress(e:ProgressEvent):void{
trace("Загрузка "+ e.target.bytesLoaded + "/"+e.target.bytesTotal);
}

Ругаеться скорее всего на
Код AS3:

dispatchEvent(new Event("xmlComplete"))


КорДум 21.01.2012 21:39

Во-первых. Что такое loaderXML? Зачем он здесь?
loader грузит вашу experement.swf. В нем же и грузится xml, верно? И диспатчится событие тоже в нем.
Во-вторых, handler должен принимать event:Event в качестве аргумента.
Ошибка скорее всего из-за того, что в Вашей experement.swf идет обращение к еще не определившемуся stage.

sneltyn 21.01.2012 21:54

Ну вот поисправлял
Код AS3:

import flash.display.Loader;
import flash.net.URLRequest;
var xml:XML;
var loader:Loader = new Loader();
 
loader.load(new URLRequest("experement.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
 
 
function onComplete(e:Event):void{
        trace('load');
        addEventListener("xmlComplete", handler);
}
 
function handler(event:Event):void{
        trace("Загрузка завершена, можно поместить на сцену.");
        addChild(loader);
}
 
 
function onProgress(e:ProgressEvent):void{
trace("Загрузка "+ e.target.bytesLoaded + "/"+e.target.bytesTotal);
}

ошибок нет но полностю не грузиться
Код AS3:

function handler():void{
        trace("Загрузка завершена, можно поместить на сцену.");
        addChild(loader);
}

сюда не доходит=(

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

Добавлено через 15 минут
TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at experement_fla::MainTimeline/frame1()

Вод код загружаемой swf что не так?

Код AS3:

stop();
import flash.net.URLLoader;
import flash.events.Event;
import flash.events.IOErrorEvent;
import flash.events.SecurityErrorEvent;
import flash.net.URLRequest;
import flash.display.MovieClip;
import flash.display.IBitmapDrawable;
import flash.text.TextField;
import fl.motion.easing.Exponential;
 
var xml:XML;
var xmlList;
var dates:Array = new Array();
var closes:MovieClip = new close_();
var bloker:MovieClip = new bloker_();
var degree:Number = 0;
var val:int;
var url:String;
var obj_2:MovieClip;
var lenta:Number;
var boo:Boolean=false;
var minText:int;
var maxText:int;
var koord_1:Number;
var btnb: MovieClip = new btn_();
var listingChild: MovieClip = new listingChild_();
var scrollBar:MovieClip = new scroll_Bar();
var scroller: MovieClip = new scroller_();
var listing: MovieClip = new listing_();
var _exp: MovieClip = new exp();
var contents: MovieClip = new menus();
//var completeLoad:MovieClip = new completeLoad_();
//addChild(completeLoad);
contents.mask = mask_mc;
contents.x=6.40;
contents.y=50;
 
var loader:URLLoader;
vybor.addEventListener(MouseEvent.CLICK, gotoMenus)
 
 
function gotoMenus(e:MouseEvent):void{
        trace('menus');
        loadCont();
        addChild(bloker);
        bloker.y=415;
        bloker.alpha=0.8;
}
 
function loadXML(file:String):void{
        var xmlLoader:URLLoader = new URLLoader();
        xmlLoader.load(new URLRequest(file));
        xmlLoader.addEventListener(Event.COMPLETE, comleteLoading);
 
}
function comleteLoading(e:Event):void{
    dispatchEvent(new Event("xmlComplete"));//ловите его в прелоадере, это и будет полной загрузкой
        xml = XML(e.target.data);
        xmlList = xml.children();
        trace(xml);
        //removeChild(completeLoad);
        loadMenus();
}
 
var obj:MovieClip;
function loadMenus(){
        for(var i:int=0; i<xmlList.length(); i++){
                var xmlListchild = xml.menu[i].children();
                var temp:MovieClip = new btn();
                temp.x = 0;
                    temp.y = 24*i;
                temp.buttonMode = true;
                temp.useHandCursor = true;
                contents.addChild(temp);
                var txt:TextField = new TextField()
            var newFormat:TextFormat = new TextFormat();
                  txt.y = 3;
                txt.selectable = false;
                  txt.width = 200;
              txt.height = 20;
                newFormat.font = "Arial";
                newFormat.bold=true;
                newFormat.size = 12;
                newFormat.color=0x000000;
            txt.text = xml.menu[i].@id;
            temp.addChild(txt);
                txt.setTextFormat(newFormat);
                txt.mouseEnabled = false;
                temp.addEventListener(MouseEvent.CLICK, btnClick)
                temp.addEventListener(MouseEvent.MOUSE_OVER,goanimation);
                temp.addEventListener(MouseEvent.MOUSE_OUT,mouse_OUT);
                temp.length = xmlListchild.length();
                temp.children=xml.menu[i].children();
        }
}
 
function goanimation(e:MouseEvent):void {
        obj = MovieClip(e.target);
        obj.gotoAndStop(2);
}
 
function mouse_OUT(e:MouseEvent):void {
        obj = MovieClip(e.target);
        obj.gotoAndStop(1);
}
 
function btnClick (e:MouseEvent):void{
 
        function removeAllChildren() : void {
                while (listing.numChildren)
                  listing.removeChildAt(0);
        }
        listing.y=0;
        scroller.y=0;
        removeAllChildren();
        for(var i:int=0; i<e.target.length;i++){
                contents.addChild(listing);
                var btn_child:MovieClip = new btnchild();
                btn_child.x = 210;
                btn_child.y = i*23.5;
                var txtChild:TextField = new TextField()
            var newFormat:TextFormat = new TextFormat();
            txtChild.y = 5;
                txtChild.selectable = false;
            txtChild.width = 200;
                  txtChild.height = 20;
                newFormat.size = 13;
                newFormat.color=0xffffff;
                txtChild.text = e.target.children[i].attributes()[0];
                listing.addChild(btn_child);
                btn_child.addChild(txtChild);
                //trace(listing.height)
                txtChild.setTextFormat(newFormat);
                txtChild.mouseEnabled = false;
                btn_child.minText=e.target.children[i].attributes()[1];
                btn_child.maxText=e.target.children[i].attributes()[2];
                btn_child.linkUrl=e.target.children[i].attributes()[3];
                btn_child.addEventListener(MouseEvent.MOUSE_OVER,goanimationbtn);
                btn_child.addEventListener(MouseEvent.MOUSE_OUT,mouse_OUTbtn);
                btn_child.addEventListener(MouseEvent.CLICK, linkto);
        }
 
        function goanimationbtn(e:MouseEvent):void {
                obj_2 = MovieClip(e.target);
                obj_2.gotoAndStop(2);
        }
 
        function mouse_OUTbtn(e:MouseEvent):void {
                obj_2 = MovieClip(e.target);
                obj_2.gotoAndStop(1);
        }       
 
        function linkto(e:Event):void{
                removeChild(bloker);
                minText=e.target.minText;
                maxText=e.target.maxText;
                url= e.target.linkUrl;
                boo=true;
                minT.text=e.target.minText+' mm';
                maxT.text=e.target.maxText+' mm';
                contents.removeChild(listing);
                removeChild(contents);
                touh.TOUCHPAD.cont.val.text=minText;
                touh.TOUCHPAD.roll.x=0;
                touh.TOUCHPAD.cont.x=0;
                degree=0;
                functTrace();
                functTrace1();
        }
 
        btn_2.addEventListener(MouseEvent.CLICK, linktoUrl);
 
        function linktoUrl(e:Event):void{
                var request:URLRequest = new URLRequest(url);
                navigateToURL(request, 'blank');
        }
 
        if(listing.height>=stage.stageHeight){
                scroller.height = (scrollBar.height/(listing.height))*scrollBar.height;
                addChild(scrollBar);
                scrollBar.x=674;
                scrollBar.y=51;
                scrollBar.addChild(scroller);
                scroller.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownh);
                stage.addEventListener(MouseEvent.MOUSE_UP, places);
                //stage.addEventListener(MouseEvent.MOUSE_WHEEL, scrollandBar);
 
                function mouseDownh(e:MouseEvent):void {
                        scroller.startDrag(false, new Rectangle(0,0, 0,scrollBar.height-scroller.height));
                        stage.addEventListener(MouseEvent.MOUSE_MOVE, changesY);
                }
 
                /*function scrollandBar (e:MouseEvent):void{
                if(scroller.y>=scrollBar.height-scroller.height-3)
                scroller.y=scrollBar.height-scroller.height-3;
                if(scroller.y<=3)
                scroller.y=3;
                scroller.y=scroller.y-e.delta;
                listing.y = -listing.height*(scroller.y/scrollBar.height);
                e.updateAfterEvent();
                }*/

 
                function places(e:MouseEvent):void{
                        scroller.stopDrag();
                        stage.removeEventListener(MouseEvent.MOUSE_MOVE, changesY);
                }
 
                function changesY (e:MouseEvent):void{       
                        listing.y = -listing.height*(scroller.y/scrollBar.height);
                        e.updateAfterEvent();
                }
        }
 
        if(listing.height<=stage.stageHeight){
                removeChild(scrollBar);
                listing.y=0;
        }
 
}
function loadCont(){
                addChild(contents);
                contents.addChild(closes);
                closes.y=330;
                closes.buttonMode = true;
                closes.useHandCursor = true;
                closes.useHandCursor = true;
                closes.addEventListener(MouseEvent.MOUSE_OVER,closesOVER);
                closes.addEventListener(MouseEvent.MOUSE_OUT, closesOUT);
                closes.addEventListener(MouseEvent.CLICK, closesCLICK);
}
 
function closesOVER(e:Event):void{
        closes.gotoAndStop(2);
}
 
function closesOUT(e:Event):void{
        closes.gotoAndStop(1);
}
 
function closesCLICK(e:Event):void{
        removeChild(contents);
        removeChild(bloker);
        functTrace1();
        boo=false;
}
 
function functTrace1():void{
        removeChild(scrollBar);
}
 
 
 
loadXML("xml.xml");


Art_133 22.01.2012 00:46

Вешать событие нужно на swf, который грузите:
Код AS3:

loader.content.addEventListener("xmlComplete", handler);


sneltyn 22.01.2012 01:10

Выдает ошибку

TypeError: Error #1009: Не удается вызвать свойство или метод со ссылкой на объект "null".
at experement_fla::MainTimeline/frame1()

Я же правильно сделал?

Код AS3:

import flash.display.Loader;
import flash.net.URLRequest;
var xml:XML;
var loader:Loader = new Loader();
 
 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.load(new URLRequest("experement.swf"));
 
function onComplete(e:Event):void{
        loader.content.addEventListener("xmlComplete", handler);
        trace('load');
}
 
function handler(event:Event):void{
        trace("Загрузка завершена, можно поместить на сцену.");
        addChild(loader);
}
 
 
function onProgress(e:ProgressEvent):void{
trace("Загрузка "+ e.target.bytesLoaded + "/"+e.target.bytesTotal);
}



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

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