将 SWF 加载到 ActionScript 3 项目中 (Flex Builder)
Posted
技术标签:
【中文标题】将 SWF 加载到 ActionScript 3 项目中 (Flex Builder)【英文标题】:Loading a SWF into an ActionScript 3 project (Flex Builder) 【发布时间】:2010-11-03 17:10:03 【问题描述】:我们正在为我们的一个欧洲客户开发一个小型 Flash 游戏,他们要求我们以这样一种方式开发我们的 Flash 游戏,以便他们可以将我们的 SWF 游戏动态加载到他们的 ActionScript 3 项目中。
基本上,他们有一个控制台,可以加载许多其他 Flash 游戏,包括我们自己的,这取决于玩家在“选择您的游戏”屏幕上按下的按钮。
基本上,我们有一个在 Flash Professional CS4 中创作的 FLA 项目,所有内容基本上都是一个简单的 Flash 游戏。当我们通过 Ctrl+Enter 测试游戏或双击运行编译好的 SWF 文件时,一切正常,游戏运行完美,每个人都是快乐的兔子。
我们需要掌握的是将我们的 SWF 加载到我们的客户 AS3 项目中,该项目基本上是在 Flex Builder 3 中创建的外部 ActionScript 3 项目。客户向我们发布了以下代码来加载 SWF:
var myGame:FunkyChickenGame = new FunkyChickenGame();
addChild(myGame);
...在客户端应用程序的 ActionScript 3 应用程序构造函数中执行,或者可能是“选择您的游戏”屏幕上按下的按钮的事件处理程序。
我们尝试在 Flex Builder 中创建一个空白的 AS3 项目,并尝试按照我上面的 sn-p 加载 SWF。我们在外部 SWF 文档类中的所有跟踪都按预期显示在 Flex Builder 控制台视图中,因此代码运行良好。
我们遇到的问题是,尽管调用了 addChild(myGame)...我们没有看到任何图形,只是封装 AS3 项目的默认背景颜色。
但是请注意,当我们在 Windows 中通过双击 Game.swf 文件运行 SWF 时,一切都完美执行,游戏运行没有任何缺陷和故障。
对此主题的任何帮助将不胜感激。提前谢谢你。
【问题讨论】:
您没有收到任何错误?对我来说,这听起来像是 Game.swf 中的空阶段引用。您能想到在舞台参考存在之前您可能会尝试与舞台交谈的任何地方吗?在 addChild(myGame); 之前阶段引用将不存在;执行。 FunkyChickenGame 的构造函数中有 Event.ADDED_TO_STAGE 事件的事件监听器吗?这将允许您监听您的游戏何时添加到舞台(通过您的客户端的 addChild() 方法),然后您可以在触发该事件时初始化您的游戏。 【参考方案1】:您需要使用的是 Loader 类的实例,如下所示:
var loader:Loader = new Loader();
// you'll need to write a method named onLoaded to capture the COMPLETE event
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaded);
loader.load(new URLRequest("game.swf"));
addChild(loader);
【讨论】:
谢谢布兰登。 onLoaded 事件会是空的吗?所以换句话说,我可以这样做:loader.contentLoaderInfo.addEventListener(Event.COMPLETE, function():void()? 当然,但是如果您不打算跟踪事件,则首先不需要该行。仅当您想跟踪加载完成时才需要它。【参考方案2】:创建一个类的实例是尽可能多的工资。您的客户发布参考资料的方式很有趣。
但是FunkyChickenGame
可能是由客户端创建的可以启动您的游戏的类。也许游戏嵌入在他们的 Flash 应用程序中,但这意味着加载时间很长。如果确实有很多游戏都是这样“加载”的。
我的建议是,您不要使用 stage、root 或任何可以链接到主应用程序而不是您的游戏的属性,并让客户决定他希望如何加载它。
【讨论】:
以上是关于将 SWF 加载到 ActionScript 3 项目中 (Flex Builder)的主要内容,如果未能解决你的问题,请参考以下文章
ActionScript 3 使用loader类加载外部swf