Autor | Zpráva | ||
---|---|---|---|
FlashManiac Profil |
#1 · Zasláno: 29. 8. 2010, 17:17:12
Zdravím..
mám malý dotaz.. Zkouším si hrát s AS3 ale narazil jsem na problém volání funkcí, které jsou v nosném SWF(parent) z načteného SWF (child) našel jsem na webu sic nějaké rady jako třeba zde: AS forum ale neřeší to můj problém... V principu si myslím, že tomám stejné.. nicméně m to píše: TypeError: Error #1010: Termín není definovaný a nemá žádné vlastnosti. at MethodInfo-6() ve zdrojovém SWF mám tohle: import fl.transitions.Tween; import fl.transitions.easing.*; import fl.transitions.TweenEvent; /*import fl.motion.MatrixTransformer; var matrix:Matrix = poleClipu[0].transform.matrix; MatrixTransformer.rotateAroundExternalPoint(matrix,350,350,90); poleClipu[0].transform.matrix = matrix;*/ var poleClipu:Array=new Array(); var loader:Loader = new Loader(); var poleAdres:Array=new Array(); var indexAdres:uint=0; function inic():void{ poleAdres.push("pozadi.swf"); poleAdres.push('test.swf'); poleAdres.push("submenu.swf"); poleAdres.push('tlacitka.swf'); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, zkontrolujNacteno); loader.load(new URLRequest(poleAdres[indexAdres])); preloader_mc.visible=true; preloader_mc.loader_mc.play(); } function zkontrolujNacteno(e:Event):void{ poleClipu.push(loader); indexAdres++; loader=new Loader(); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, zkontrolujNacteno); if(indexAdres<4){ if(poleAdres[indexAdres]==null){ indexAdres++; poleClipu.push(null); } loader.load(new URLRequest(poleAdres[indexAdres])); }else{ preloader_mc.loader_mc.gotoAndStop(1); preloader_mc.visible=false; prijedPozadi(); } } function prijedPozadi():void{ addChild(poleClipu[0]); poleClipu[0].getChildAt(0).x=poleClipu[0].width*(-0.5); poleClipu[0].getChildAt(0).y=poleClipu[0].height*(-0.5); poleClipu[0].y=350; poleClipu[0].x=-350; var mujTween:Tween=new Tween(poleClipu[0],"x",Strong.easeOut,poleClipu[0].x,350,1,true); mujTween.addEventListener(TweenEvent.MOTION_FINISH,spustPrezentaci); } function spustPrezentaci(e:TweenEvent) { addChild(poleClipu[1]); addChild(poleClipu[2]); poleClipu[2].getChildAt(0).x=poleClipu[0].width*(-0.5); poleClipu[2].getChildAt(0).y=poleClipu[0].height*(-0.5); poleClipu[2].y=350; poleClipu[2].x=350; addChild(poleClipu[3]); poleClipu[3].getChildAt(0).x=poleClipu[0].width*(-0.5); poleClipu[3].getChildAt(0).y=poleClipu[0].height*(-0.5); poleClipu[3].y=350; poleClipu[3].x=350; poleClipu[3].getChildAt(0).inic(); //var mujTween:Tween=new Tween(poleClipu[0],"rotation",None.easeNone,0,90,0.5,true); } function works():void{ trace('parent'); } inic(); a v načítaém SWF je tohle: import flash.events.MouseEvent; function inic():void{ prezentace_mc.gotoAndStop(1); spoluprace_mc.gotoAndStop(1); kontakt_mc.gotoAndStop(1); Mouse.hide(); kurzor_mc.x=this.mouseX; kurzor_mc.y=this.mouseY; stage.addEventListener(MouseEvent.MOUSE_MOVE,chytMuchu); vytvorFce(); } function chytMuchu(e:MouseEvent):void{ kurzor_mc.x=this.mouseX; kurzor_mc.y=this.mouseY; } function vytvorFce():void{ prezentace_mc.addEventListener(MouseEvent.ROLL_OVER,naTlacitku); spoluprace_mc.addEventListener(MouseEvent.ROLL_OVER,naTlacitku); kontakt_mc.addEventListener(MouseEvent.ROLL_OVER,naTlacitku); prezentace_mc.addEventListener(MouseEvent.ROLL_OUT,mimoTlacitko); spoluprace_mc.addEventListener(MouseEvent.ROLL_OUT,mimoTlacitko); kontakt_mc.addEventListener(MouseEvent.ROLL_OUT,mimoTlacitko); prezentace_mc.addEventListener(MouseEvent.CLICK,prezentaceClick); } function naTlacitku(e:MouseEvent):void{ e.target.play(); } function mimoTlacitko(e:MouseEvent):void{ e.target.gotoAndStop(1); } var prezentaceClick:Function= function():void{ //trace(this) //trace(this.parent) //trace(this.parent.parent) trace('child'); MovieClip(this.parent.parent).works(); } //inic(); je zvláštní že směr volání parent->child to zvládá OK ale jak chci zavolat fci z child->parent.. tak to vypíše chybu.. zdrojáky jsou zde: http://uloz.to/5700785/projekt.rar pokud by měkdo věděl jak na to byl bych vděčný.. jsem z toho poněkud zoufalý.. nechci to dělat pomocí AS2, pokud to nebude bezpodmínečně nutné.. |
||
embee Profil |
#2 · Zasláno: 30. 8. 2010, 11:56:50 · Upravil/a: embee
Podle me mas blbe cestu, tohle musi fungovat (nemam tu cs4, takze to nemuzu checknout... a stejne bez index.fla to uplne nejde). Tenhle error je casto zpusoben typem (ale v tom kodu typo nevidim, tak nevim)
A zkus zrusit warpovani do MovieClip() - to jsem u kontrukci cest nikdy nepouzival a funguje to f poho :) Co ti blijou ty tracy //trace(this) //trace(this.parent) //trace(this.parent.parent) ? |
||
FlashManiac Profil |
#3 · Zasláno: 30. 8. 2010, 13:33:41
vysype to tohle:
[object MainTimeline] [object Loader] [object MainTimeline] pak jsem přišel ještě na tehle způsob: stage.getChildAt(0).spustPrezentaci(); funguje to..ale musel jsem vypnout striktní mód.. teď jsem ale zkusil i this.parent.parent.spustPrezentaci(); a zazracne to jede.. vcera mi to nechtělo jet ani při vypnutém striktním módu.. trošku nechápu.. každopádně to teď už funguje |
||
embee Profil |
#4 · Zasláno: 30. 8. 2010, 14:45:59
No, striktni kod vypinat nemusis... teda z me zkusenosti - wrapnu to do anonymni funkce a compiler to pochrousta... ale je divne, ze pouzivas stejny figl a hazlo ti to error. Kazdopadne:
this.parent.parent.spustPrezentaci(); tenhle styl pouzivam ja. Jeste je moznost ta, ze pokud se jedna o tridu a ne o swf soubor, tak te tride muzes predat referenci na stage v konstruktoru a odkazovat se uvnitr tridy pres tu referenci. Taky reseni :) Ale to jenom u trid. |
||
FlashManiac Profil |
#5 · Zasláno: 31. 8. 2010, 07:18:53
embee:
tak parkticky ten samy styl (this.parent.parent.spustPrezentaci(); ) jsem používal i v AS2.. nevím zda používáš CS4 nebo CS3. Pokud CS3 je možné, že je to tam trošku benevolentnější a nemusíš vypínat striktní mód.. každopádně mi to teď funguje.. dík za pomoc |
||
embee Profil |
#6 · Zasláno: 31. 8. 2010, 15:28:00
FlashManiac:
cs3, 4 a 5 - vsude se to chova stejne :) nz, stejne sis to vyresil sam :) |
||
Časová prodleva: 14 let
|
0