gpt4 book ai didi

actionscript-3 - 如何从加载的 swf 访问父级 movieclip 的变量

转载 作者:行者123 更新时间:2023-12-01 16:16:29 26 4
gpt4 key购买 nike

我有一个加载外部 swf 的 swf。加载器 swf 有一个变量,我想从加载的 swf 访问该变量。我使用 MovieClip(parent.parent).myVar 但它返回此错误

TypeError: Error #1009: Cannot access a property or method of a null object reference. at card01_fla::MainTimeline/frame1()

加载器 swf 有一个自定义文档类,我认为这是问题所在。

提前致谢。

编辑

这是主 swf 的 as

    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 函数中?

最佳答案

您只有一个 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);
}

回答问题中的以下更新:

If I addChild(loader) in the onViewClick instead of onCardInit, then Object(parent.parent).testVar in the first frame of the loaded swf works. Why doesn't it work if I addChild inside the onCardInit function?

同样,这可能是因为您添加了不同的 loader 对象 - 您是否单击了多个 View 按钮?单击查看按钮并等待其加载以查看其工作情况。

关于actionscript-3 - 如何从加载的 swf 访问父级 movieclip 的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1797602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com