problem med loading af .swf
Som overskriften så fint siger det:
Har et problem med at load en .swf ind i et andet...
Jeg har to knapper:
"physic_1" og "banner_1", og har så to .swf som hedder "physic_1.swf" og "banner_1.swf" og til sidst har jeg mit hoved dokument.
Det går problemfrit med at hente "banner_1.swf", men når jeg skal hente "physic_1.swf" så får jeg denne besked i min OUTPUT:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at 2_fla::MainTimeline/addBox()
at 2_fla::MainTimeline/frame1()
Koden jeg har brugt er:
physic_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork); banner_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork); function showWork(evt:MouseEvent) { loadURL = evt.target.name + ".swf"; loaderRequest = new URLRequest(loadURL); portfolioLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, portfolioLoadComplete); portfolioLoader.load(loaderRequest); portfolioHolder_mc.x = stage.stageWidth/2; portfolioHolder_mc.y = stage.stageHeight/2; function portfolioLoadComplete(evt:Event) { trace("Load complete"); addChild(evt.currentTarget.content); } }
Som det ses, så vil Flash trace "Load complete" i min OUTPUT, når der bliver loaded noget. Og det gør den også når jeg henter "physic_1.swf" - det også fejlmeldingen...
Kan det være fordi at min "physic_1.swf" primært består af kodning og selv smider nogle movieclips ind på scenen ved hjælp af AS3 ?
Er selv helt blank her...
//Krüger
Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!
- log ind eller opret konto for at skrive kommentarer


Kommentarer
Prøv at skrive :
banner_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork);
physic_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork);
så er det garanteret banner_1 som ikke virker
Personlig mener jeg at der er mange ting i vejen med måden du gør det på. Der er blandt eventhandlerne en indbyrdes prioritering samt er der problemer fordi as3 er asynchront og din loading kan tage forskellig tid ... osv, en masse timing problemer kan opstå - så vidt jeg kan se. Bare gør det på følgende måde
banner_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork);
physic_1.addEventListener(MouseEvent.MOUSE_DOWN, showWork);
var swfToload:Array ) = new Array(swf_navn1,swf_navn2)
private var counter:int = 0
private function showWork(evt:Event):void{
showWork( swfToload[counter])
}
private function LoadshowWork(swfname:String):void{
loaderRequest = new URLRequest(swfname);
portfolioLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, portfolioLoadComplete);
portfolioLoader.load(loaderRequest);
}
}
private function portfolioLoadComplete(evt:Event):void{
//kender ikke lige dit setup og din displaylist men det her ved du bedre selv :
portfolioHolder_m.addChild(evt.target.content)
portfolioHolder_mc.x = stage.stageWidth/2;
portfolioHolder_mc.y = stage.stageHeight/2;
addChild(portfolioHolder_m)
counter += 1
if (counter < swfToload.lenght){
showWork( swfToload[counter])
}
}
NÆÆÆÆÆÆ hovsa jeg har vist helt misforstået hvad det var du ville gøre ... det må du undskylde.
Jeg troede at du ville hente flere swf filer gennem ét enkelt museDown.... menn det ville du ikke 
#1 salbeik


hehe, det her er faktisk den første "problem" jeg har smidt i noget tid
Har skrevet lidt hos de andre, og så har jeg lige spurgte om noget login sikkerhed
Men nej, er skam ingen guru - eller noget tæt på
Og til forslagne, tak tak. Kigger lige på det imorgen, når jeg får startet Flash op igen xD
Indtil da, godnat og sov godt når i når dertil
Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!
Hej,
Jeg ved ikke om du har fået løst dit problem. Meen i din "banner_1.swf" prøv inden du kører noget i koden, at køre en ADDED_TO_STAGE.
Så er du sikker på at din "banner_1.swf" er loaded helt, inden den køres. Hvis din banner prøver at få fadt i noget i swfen som ikke er loaded endnu får du "Cannot access a property or method of a null object reference.". Den prøver at gribe noget som ikke findes.
Ved ikke om det vil løse problemmet men jeg tænker det er et forsøg værd.
//Claussen
Okay, nu fik jeg det løst. Men er støt på endnu et problem, Doh'
Jeg har sat stage på mit banner til at være 680 langt. Men har et tekstfelt uden for stage. Når jeg prøver at hente bruge længden af banner_1.swf når jeg har loaded det, så giver det mig længden af stage + længden af tekstfeltet. Det er ikke helt optimalt da det påvirke min videre kodning. Så er der nogen måde hvorpå man kan finde længden af ens loadede .swf's længde/højde?
Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!
Mener du de width/height dimentioner du benyttede, da du Publicerede/Kompilerede swf-filen?
Hvis du kalder et særligt php-script kan det undersøge swf filen for netop disse og give dig svaret.
Prøv at se her: http://php.net/manual/en/function.getimagesize.php.
Men hvis du selv laver filen, burde du jo kende dimensionerne i forvejen!
Alternativt kunne du vente med at tilføje dit TextField instance til et tidspunkt, hvor der var brug for det. Underforstået: Dit banner kunne have en Event.ADDED_TO_STAGE listener, der tilføjer dit textField!
Hvis det absolut skal være på stage, kan du gøre det usynligt (alpha = 0.0) og placere det så det ikke er større end din Stage og vel at mærke placeret på et sted, så det ikke går ud over Stage.
Jo, jeg kender skam dimensionerne i forvejen. Men vil gerne bruge en kode som kan bruges til flere forskellige størrelser uden jeg skal tjekke hvilke .swf jeg loader og så finde de dimensioner jeg har skrevet ned.
Har nemlig selv tænkt på at bruge swicth(evt.target.name), men det bliver bare pænt langt hvis jeg tilføjer flere .swf med tiden. Så kunne godt tænkte mig noget mere simpelt
Er der ikke nogen måde som kan tjekke det uden brug af php, men kun med ren as3?
- Evt gå ind i den loadede swf og finde og læse et eller andet. F.eks. en variable som siger hvad width/height er?
Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/display/...