problem med loading af .swf

Se nigelaj's brugerprofil
Indmeldt: 23-10-2008
Indlæg: 94
Er offline

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!

Kommentarer

Se salbeik's brugerprofil
Indmeldt: 10-06-2008
Indlæg: 38
Er offline

Very Happy Det går ikke så godt med det der AS3! .... har lige været her få minutter og synes at jeg ser din profil mange gang .... Nå ja, ikke ment som nogen kritik...sådan var det også for mig.

Se salbeik's brugerprofil
Indmeldt: 10-06-2008
Indlæg: 38
Er offline

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

Se salbeik's brugerprofil
Indmeldt: 10-06-2008
Indlæg: 38
Er offline

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])
}

}

Se salbeik's brugerprofil
Indmeldt: 10-06-2008
Indlæg: 38
Er offline

NÆÆÆÆÆÆ hovsa jeg har vist helt misforstået hvad det var du ville gøre ... det må du undskylde. Very Happy Jeg troede at du ville hente flere swf filer gennem ét enkelt museDown.... menn det ville du ikke Very Happy

Se nigelaj's brugerprofil
Indmeldt: 23-10-2008
Indlæg: 94
Er offline

#1 salbeik
hehe, det her er faktisk den første "problem" jeg har smidt i noget tid Razz
Har skrevet lidt hos de andre, og så har jeg lige spurgte om noget login sikkerhed Razz
Men nej, er skam ingen guru - eller noget tæt på Razz

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 Razz

Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!

Se Claussen's brugerprofil
Indmeldt: 23-01-2008
Indlæg: 36
Er offline

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.

addEventListener(Event.ADDED_TO_STAGE, init);

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. Smile

//Claussen

Se nigelaj's brugerprofil
Indmeldt: 23-10-2008
Indlæg: 94
Er offline

Okay, nu fik jeg det løst. Men er støt på endnu et problem, Doh' Pinch

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? Smile

Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!

Se PeterF's brugerprofil
Indmeldt: 10-08-2007
Indlæg: 78
Er offline

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!

// Banner frame 1.
loaderInfo.addEventListener(Event.ADDED_TO_STAGE, addedToStaageListener);
 
function addedToStageListener(e:Event) : void
{	
  var tf:ClassTextFieldToAddInLibrary = new ClassTextFieldToAddInLibrary();
  tf.x = 0; // Eller hvor det nu skal placeres
  tf.y = 0; // Eller hvor det nu skal placeres
  addChild(tf);
}

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.

Se nigelaj's brugerprofil
Indmeldt: 23-10-2008
Indlæg: 94
Er offline

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 Razz

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? Smile

Det bedste tidspunkt at plante et træ, var for 100 år siden.
Det næstbedste er I DAG!

Se bloop's brugerprofil
Indmeldt: 24-12-2007
Indlæg: 334
Er offline