| 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: 16 let
|
|||
0