PDA

Volledige versie bekijken : loader & request te laat geladen.


tom_web_freak
%Europe/Berlin %803 %2009, 19:17
Hallo Allemaal!

Ik heb nu de volgende code:
var url = 'http://192.168.1.146/';
var loaderXml:URLLoader = new URLLoader();
loaderXml.addEventListener(Event.COMPLETE, onComplete);
loaderXml.load(new URLRequest(url+"scripts/xml/logedinUserInfo.php?ramdom="+Math.random()));
var ReadyToLoad:Boolean = false;
function onComplete(e:Event)
{
var xml:XML = new XML(loaderXml.data);
if(xml.User.attribute("logedin") == 'yes')
{

preloadFile('Habbonline.swf');
}
else
{
preloadFile('Login.swf');
}
}
function preloadFile(file:String)
{
var request:URLRequest = new URLRequest(file);
var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Progress Event.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, loadComplete);
}
function loadProgress(event:ProgressEvent):void
{
var percentLoaded:Number = event.bytesLoaded / event.bytesTotal;
percentLoaded = Math.round(percentLoaded * 100);

this.percentLoaded.text = String(uint(percentLoaded)) + "%";
}

function loadComplete(event:Event):void
{
trace("Preloader Complete on "+new Date());

this.percentLoaded.visible = false;

}

loader.load(request);
this.addChild(loader);

Ik krijg nu een aantal errors:
1120: Access of undefined property loader.
1120: Access of undefined property request.
1120: Access of undefined property loader.

deze errors gaan om de laatste 2 regels. Ik weet waardoor deze errors tevoorschijn komen: de variabele request & loader worden aangeroepen voordat het klaar is met laden. Ik heb echt van alles geprobeerd om die 2 regels pas uit te voeren als de xml request klaar is, ik heb bijv, de laatste 2 regels onderaan in de functie loadComplete gezet. Dan krijg ik geen errors, maar het bestand is ook niet geladen.

Weet iemand hoe ik moet zorgen dat die regels pas aangeroepen worden als de request klaar is?

Alvast heel erg bedankt!
Tom

B-Mantis
%Europe/Berlin %822 %2009, 19:45
dit heeft met de scope te maken, oftewel, waar variabelen bestaan:



var a:int = 0;
function myFunction():void {
trace(a); //0
var a:int = 1;
trace(a); // 1
trace(b); // 2
}
var b:int = 2;


zoals je ziet, wordt var b:int = 2 eerst uitgevoerd, en daarna (indien aangeroepen) de functie. In jouw code bestaan de loader en de request nog niet, omdat preLoadFile niet is aangeroepen.

En zelfs al roep je die functie wel aan, dan zijn loader en request alleen geldig in die functie.

Als ik zo gauw kijk, denk ik dat je alweer een stuk verder komt als je dit doet:


function preloadFile(file:String)
{
var request:URLRequest = new URLRequest(file);
var loader:Loader = new Loader();

loader.contentLoaderInfo.addEventListener(Progress Event.PROGRESS, loadProgress);
loader.contentLoaderInfo.addEventListener(Event.CO MPLETE, loadComplete);

loader.load(request); //hier zijn ze wel geldig
this.addChild(loader);
}

tom_web_freak
%Europe/Berlin %828 %2009, 19:53
ja! bedankt! zo werkt het wel!