Autor Zpráva
FlashManiac
Profil
zdravím,
pomaličku začínám přecházet na AS3, tak si zkouším nějaké testy a zjistil jsem, že nikde nenacházím možnost, kdy do nějakého MC načítám nějaké SWF(pomocí objektu Loader) a pak z tohoto načteného SWF,potřebuju tento odstranit..
v načítacím MC je tohle:
konec_mc.addEventListener(MouseEvent.CLICK,vyskocExiter);
function vyskocExiter(e:MouseEvent):void{
	var exiter_mc:MovieClip=new MovieClip();
	exiter_mc.name='exiter_mc';
	addChild(exiter_mc);
	var loader:Loader=new Loader();
	var url:URLRequest = new URLRequest("exiter.swf");
	loader.load(url);
	exiter_mc.addChild(loader);
	//this.stage.getChildByName('exiter_mc');
}


a v načítaném je tohle:
ne_btn.addEventListener(MouseEvent.CLICK,zmizExiter2);
function zmizExiter2(e:MouseEvent):void{
	trace(this.parent.numChildren);
	//for(var i:int=0;i<this.parent.numChildren;i++){
		this.parent.removeChild(this.parent.loader);
	//}
}

a vypíš mi to něco ve smyslu (když chci zkompilovat ten načítaný SWF), že se nemůže dostat do té proměnné loader či co..
zde je zdroják
http://leteckaposta.cz/832215145

ani na fórech jsem nic nenašel..jen to kdyz se to vypíná přímo z načítacího SWF,ale to já nechci..
AS2 toto řeší snadno..ale AS3 mi přijde trošku neohrabaný co se práce s moduly týče
dík
embee
Profil
no, podle me je problem prave v tom, jakym zpusobem vytvaris ten loader objekt - mas ho jako lokalni promennou. Z toho plyne, ze ta promenna neexistuje mimo funkci, ve ktere je deklarovana.

Flash se chova tak - aspon to jsem vypozoroval - ze lokalni promenne, byt jsou v display object listu, nejsou samy o sobe pristupne. Nicmene by se to melo dat obejit tak, ze druhou funkci napises takto:

function zmizExiter2(e:MouseEvent):void{
this.parent.removeChild(this)
}

- v priade, ze this je hlavni tajmlajna toho nacteneho swf (nejdriv si to over pres trace). Nicmene musis pamatovat na to, ze samotne odebrani objektu z dispaly object listu se ho nezbvis uplne, porad je v pameti. Na to, aby se nejaky objekt smazal uplne, musi byt splneno to, ze na nej neodkazuji zadne reference - tzn musi byt bez listeneru, resp. bez silne referencovanych listeneru, a vsechny promenne, ktere ho odkazuji musi dosatat hodnotu null. Pak se smaze.

Nicmene v tvem pripade bych asi volil zcela jiny postup - predpokladam, ze se jedna o loadovani jen nekolika ruznych swf souboru - imho nema smysl pokouset se zavirat nacteny objekt z nej samotneho. Mnohem logictejsi je mit tyto funkce na hlavni casove ose a z ni pak ovladat, co se naloaduje/odloaduje, kdy a proc.

Kazdopadne co se samotneho laoderu tyce, doporucuju podivat se na metodu unload(), ktera je delana prave pro mazani obsahu naloadovanem nejakym loader objektem.
FlashManiac
Profil
embee
dík za odpověď já se v tom zkusím pohrabat jakmile mi přijdou knihy :) jen ještě dotaz.. jak se v AS3 zařídí aby se z načítaného SWF spustila funkce na hlavní čas. ose? když jsem to zkoušel tou metodou this.parent.nejakaFce(); tak mi to vypsalo chybu, že se odkazuje na potenciálně neexistující funkci a kompilace neproběhla.. přitom je to základní požadavek.. dík za odpověď
embee
Profil
FlashManiac - jo, to je klasicky problem - v dobe kompilace swf totiz nema flash o existenci te funcke ani paru -> pro nej neexistuje.

Jsou dva zpusoby, jak to obejit. Bud bez do publish settings -> actionscpript settings a vypni striktni mod kompileru (coz se nedporoucuje, protoze pak ti kompiler nechyti polovinu erroru ve skriptu) a nebo pouzij anonymni funkci:

var myFunction:Function = function():void {
this.parent.nejakaFunkce();
}

this.myFunction();

kompiler ve flashi je totiz mnohem benevolentnejsi k anonymnim funkcim.
FlashManiac
Profil
embee
nejak mi to nepomohlo.. zkoušl jsem ty anonymní funkce.. při kompilaci to už sice chybu nevyhodilo..ale kdyz jsem to rozjel tak mi to bude hlásilo, že není zadaná vlastnost na loaderu toho načítacího klipu..tak jsem zkusil tam dát ještě jeden parent..a pak mi to psalo že tam tu funkci vůbec nemá.. zkoušel jsem to i s MovieClip(root).nejakaFce(); a výsledek stejný..
je zde upravený zdroják.. mohl by ses pls na to kuknout a upravit to tak aby to spoustelo funkci na hlavní čas. ose?
dík
http://leteckaposta.cz/238259722
embee
Profil
FlashManiac
no jednak tu nemam falsh cs4 a jednak se mi moc nechce hrabat ve zdrojacich.

Nicmene doporucuju do anonymni funkce nastrkat nekolik trace nasedujicim zpusobem:

trace(this)
trace(this.parent)
trace(this.parent.parent)
atd.

Tim dostanes dobrou predstavu o tom, co je vnorene v cem. Z tech erroru, co tu popisujes vyplyva, ze bud mas spatne cesty, nebo mas typo v nazvu property/metody, kterou chces volat. Flash si nikdy nevymysli :D

Osobne tuto techniku sem tam pouzivam (anonymni funkce) a funguje bez problemu. Mimochodem - vlastnost a funcke (metoda) jsou dve ruzne veci - takze moc nerozumim tomu, ze ti to jednou zahlasilo neexistujici vlastnost a podruhe neexistujici funkci. Nekde tam mas krpu.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: