[英]How to access parent movieclip's variable from loaded swf
我有一个加载外部swf的swf。 加载器swf有一个我想从加载的swf访问的变量。 我使用MovieClip(parent.parent).myVar
但它返回此错误
TypeError:错误#1009:无法访问空对象引用的属性或方法。 at card01_fla :: MainTimeline / frame1()
加载器swf有一个自定义文档类,我认为这是问题。
提前致谢。
编辑
这是主要的SWF
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.net.URLRequest;
import flash.text.TextField;
/**
* ...
* @author chchrist
*/
public class CardSender extends Sprite
{
private var loader:Loader;
private var viewButtonArray:Array;
private var sendButtonArray:Array;
private var cardContainer:Sprite;
public var testVar:String
public function CardSender() {
testVar = "it worked!!!";
init();
}
private function init() {
viewButtonArray = [cardsenderMC.view01, cardsenderMC.view02, cardsenderMC.view03, cardsenderMC.view04];
for each( var viewButton in viewButtonArray) {
viewButton.buttonMode = true;
viewButton.addEventListener(MouseEvent.CLICK, onViewClick);
}
}
private function onViewClick(e:MouseEvent):void {
var cardName = "card"+e.target.name.substring(4)+".swf";
loader = new Loader();
loader.load( new URLRequest(cardName));
loader.contentLoaderInfo.addEventListener(Event.INIT, onCardInit);
}
private function onCardInit(e:Event):void {
addChild(loader);
var content:* = loader.content;
content.closeButton.addEventListener(MouseEvent.CLICK, onCloseClick);
}
private function onCloseClick(e:MouseEvent):void {
removeChild(loader);
}
}
}
我试图使用此代码从加载的swf访问测试变量
trace(MovieClip(parent.parent).testVar);
编辑#2
如果我addChild(loader)
不在onCardInit但在onViewClick和加载的swf的第一帧中我有Object(parent.parent).testVar
它工作...但为什么它不想在onCardInit内功能?
parent.parent是错误的。 尝试使用:
MovieClip(MovieClip(e.currentTarget.parent).parent).myVar ;
你必须将第一个父类转换为某个类,如MovieClip,然后获取这个新的MovieClip的父级,然后获取内部变量。
您只有一个loader
变量,并且您正在创建四个Loader
实例并将它们分配给它 - 因此,如果您快速连续单击它们中的所有四个,则loader
变量将有效地包含与最后一次单击相对应的Loader
对象。 所有addChild
调用都将作用于同一个Loader
对象 - 其他对象不会被添加,其父对象将继续为null
对代码进行以下更改:
private function onCardInit(e:Event):void
{
addChild(LoaderInfo(e.currentTarget).loader);
var content:DisplayObject = loader.content;
trace(content);
trace(content.closeButton);
content.closeButton.addEventListener(MouseEvent.CLICK, onCloseClick);
}
private function onCloseClick(e:MouseEvent):void
{
trace(e.currentTarget);//should be the closeButton
trace(e.currentTarget.parent);//should be the loaded swf
trace(e.currentTarget.parent.parent);//should be the Loader object that loaded it
//The following will work only if last three traced correctly
removeChild(e.currentTarget.parent.parent);
}
回答问题中的以下更新:
如果我在
onViewClick
而不是onCardInit
中添加了addChild(loader)
,那么加载的swf的第一帧中的Object(parent.parent).testVar
就可以了。 如果我在onCardInit函数中添加addChild,为什么它不起作用?
同样,这可能是因为您要添加不同的loader
对象 - 您是否单击了多个视图按钮? 单击视图按钮并等待它加载以查看它是否正常工作。
尝试跟踪parent和parent.parent,我确定这是因为一个adiffal“parent”
loader.content不是movieclip,因此它没有相同的功能。 尝试
myLoadedClip:MovieClip = MovieClip(loader.content);
然后你的myLoadedClip.parent.myVar应该出现
您可能希望您的处理程序在Event.COMPLETE上而不是在Event.INIT上触发
这个加载的swf中的唯一行代码解决了它! ;)
影片剪辑(影片剪辑(parent.parent).root).play();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.