【问题标题】:Accessing variables inside embedded SWF?访问嵌入式 SWF 中的变量?
【发布时间】:2011-08-14 23:10:20
【问题描述】:

我正在编写一个 AS3 应用程序,它将外部 SWF 文件加载到我舞台上的影片剪辑中。我需要在嵌入式 SWF 中读取一个变量。我想我可能可以通过bgURL 做到这一点,但我不知道怎么做。

如何读取嵌入式 SWF 中的变量?

var bgLoader:Loader = new Loader();

var bgURL:URLRequest = new URLRequest("file.swf");
bgLoader.load(bgURL);
addChild(bgLoader);

【问题讨论】:

  • 取决于您的变量相对于 file.swf 的位置。例如,如果在 file.swf 的顶层有一个变量 myVar(将其视为全局变量),您应该能够执行以下操作:trace(MovieClip(bgLoader.content).myVar); 在 swf 完全加载后
  • 实际上有几层深。如果加载的 MovieClip 被命名为“top”,那么我将如何访问它:trace(top._root.Player.played);我不太明白你对 MovieClip 做了什么,“MovieClip(obj).varName”是什么意思?
  • 外部swf也是AS3吗?
  • 仅供参考:您的问题是 mentioned on meta 关于被拒绝的编辑。这就是它比通常情况下受到更多关注的原因。

标签: actionscript-3 flash


【解决方案1】:

类似于trace(MovieClip(bgLoader.content).Player.played);,但请确保您访问 Event.COMPLETE 处理程序中的内容:

bgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,bgLoaded);
function bgLoaded(event:Event):void{ trace(MovieClip(bgLoader.content).Player.played) }

bgLoader.content 返回一个 DisplayObject,但您需要以 MovieClip 的形式访问您的内容。为此,您可以使用casting

这是假设您的外部 swf 也是 AS3(好点 Teo.sk !) 这个位:_root.Player.played 看起来像 AS2。很遗憾您无法访问 变量直接形成加载的 AS2 电影。 不过,您可以使用Local Connection 类在之间来回发送变量 AS2 和 AS3。幸运的是,Grant Skinner 写了一个不错的小工具,叫做SWFBridge 让这更容易

【讨论】:

  • 我刚刚发现嵌入式 swf 是 AS2。你确定我不能访问变量吗?因为,当我在我的 C# Windows 应用程序中嵌入相同的 swf 时,我可以访问它的变量。
  • 我很确定您无法从加载它的 as3 swf 访问 as2 变量。 as2 swf 在 as3 中作为 AVM1Movie 实例运行,该实例受到限制,以便并排运行 AVM1(as1 和 2 swfs) 和 AVM2(as3 swfs)。我不知道您可以从 C# 应用程序访问变量,这非常酷。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2014-01-15
  • 2012-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多