as3 从网络外部加载 swf 以控制从网络外部加载的 swf

Posted

技术标签:

【中文标题】as3 从网络外部加载 swf 以控制从网络外部加载的 swf【英文标题】:as3 externally loaded swf from network to control externally loaded swf from network 【发布时间】:2012-03-31 17:29:38 【问题描述】:

我有好几篇这样的帖子,但我还没有得出最终答案,所以我把这张图片放在一起,试图解释我想要做什么。我离得很近。 如果你能帮助我,非常感谢。到目前为止的工作日。

如何通过另一个外部加载的 SWF 中的代码控制一个外部加载的 SWF 中的子级?

编辑: 以下是我需要帮助的位于 "ONE.swf" 中的 THEE 代码。我只知道一两行,但我就是听不懂。

function FunctionInOne()

var parentObj:Object = this.parent.parent as Object; //// GIVES ACCESS TO "Content.swf"
var TheStage:Object = this.parent.parent.parent as Object; //// GIVES ACCESS TO STAGE
trace(TheStage.stage.stageWidth);
trace(parentObj);  ///    [object MainTimeline]
trace(parentObj.ONE); /// [object Loader]
trace(parentObj.TWO); ///  [object Loader]

parentObj.alpha = .3; /// NOW I CONTROL THE ALPHA OF "Content.swf" from ONE.swf
var ControlTWO:Loader = parentObj.TWO; // GIVES ACCES TO LOADER TWO

ControlTWO.alpha = .3; // NOW I CONTROL THE ALPHA OF TWO.swf from ONE.swf


BUT HOW DO I GET ACCESS TO CONTROL THE CHILDREN IN "TWO.swf" from "ONE.swf"


var TWOchildren:MovieClip = MovieClip(TWO.content); // DOES NOT WORK
TWOchildren.ChildInTWO.alpha = .3;


var TWOchildren = TWO.content as MovieClip; // DOES NOT WORK
TWOchildren.ChildInTWO.alpha = .3;  // DOES NOT WORK

TWOchidren.FunctionInTWO(); /// DOES NOT WORK


编辑:2012 年 3 月 16 日

我可以从 ONE.swf 访问 swf TWO.swf 并使用此行控制它的 alpha:

trace(MovieClip(parent.parent).ONE); 

但是我需要控制一个孩子,所以我认为下面的代码可以工作,但它没有:

MovieClip(parent.parent).ONE.TheChild.alpha = .3;

结束编辑---------------

如果你能看到,这里是另一个链接:http://mycontactcorner.com/sandbox/testing/ChildTwo.jpg

【问题讨论】:

【参考方案1】:

好的,我找到了!

var InsideConent:Object = this.parent.parent as Object; //// GIVES ACCESS TO "Content.swf"
var ItWorksNow:Sprite = MovieClip(InsideConent.TWO.content).ChildInTWO;  /// 

ItWorksNow.x = 333;  /// I can control property x
ItWorksNow.alpha = .3;  /// I can control the ALPHA! :)

【讨论】:

【参考方案2】:

看到硬编程风格:]

给你的装载机添加这个,它应该会有所帮助:

import flash.system.ApplicationDomain;
import flash.system.LoaderContext;
var loader:Loader = new Loader ( urlRequest , new LoaderContext(false, ApplicationDomain.currentDomain));

第二件事:

如果您确保内容已加载,您应该尝试访问内容。 因此,将开始加载第二个 SWF 加载到加载第一个 SWF 的完整功能,您应该跟踪(TWO.content)并查看是否已经加载了任何内容。

【讨论】:

谢谢,是的,我快速更改了代码上的一些变量。我想知道是否有一些错误,但它确实有效......除了我无法弄清楚的最终问题。 :) 谢谢...我正在为这个答案而努力。 :) P.S.什么是“硬式”编程? 现在可以用了吗?硬风格 - 我的意思是你应该阅读一些关于 OOP、设计模式的知识,并检查专业开发人员如何制作类似的应用程序来编写更清晰、更好的代码。 不,它不起作用。仍然没有找到答案。我说谢谢,因为我指的是你对我的形象所做的评论。是的,我知道我需要努力理解动作……脚本。我不确定我是否完全理解什么是下载器以及所有的好东西【参考方案3】:

MovieClip(parent.parent).function(); 反之亦然引用movieclip.OtherChildmoviename.function();

这个结构你可以从 where ever 或 anymovie 调用一个函数以获得更好的解释检查 actionscript 2,因为它使用 _root,这可能会使上面的内容更清晰

让我们不要你怎么走;

【讨论】:

这让我可以进入影片剪辑:trace(MovieClip(parent.parent).TheExit);但是我需要控制一个孩子,所以我认为下面的代码可以工作,但它不起作用:MovieClip(parent.parent).TheExit.TheChild.alpha = .3;

以上是关于as3 从网络外部加载 swf 以控制从网络外部加载的 swf的主要内容,如果未能解决你的问题,请参考以下文章

ActionScript 3 AS3从URL加载外部SWF

ActionScript 3 AS3从远程URL加载外部SWF

ActionScript 3 AS3加载和显示外部SWF文件

AS3加载和显示外部SWF文件

AS3在运行时加载和访问外部SWF中的字体

从 Flash 中的 swf 文件外部加载 xml 文件