4

关于我的预加载器和主应用程序类(所有 AS3 / Flash CS4)之间的交互,我看到了一些奇怪的行为。粗略地说,这是事件的流程:

  1. Preloader.swf 加载两个东西:main.swf,它是主应用程序,以及由文本和图像组成的自定义对象的资源,这些资源由预加载器从各种 URL 组装到对象中。

  2. 加载完成后,Preloader 将 main.swf 添加为子项。预加载器然后调用
    初始化(myCustomObject)
    在 main.swf 上,其中 myCustomObject 是对预加载器在步骤 1 中组装的对象的引用,并且
    公共函数初始化(自定义对象:自定义对象):无效)
    是 Main.as 中的方法签名。(Preload.as 将 Main 转换为 * 类型的对象,以便能够调用任意函数而不必担心编译时错误。)

  3. Main.as 实际上是应用程序本身的容器,因此它实例化了一个
    新应用程序(自定义对象);
    传递对由预加载器组装的 customObject 的引用,并将其添加为子项。

我已经安装了迅雷,所以我可以在应用程序运行时记录消息,这就是我确定正在发生的事情。步骤 3 中的 Application 对象的实例化是造成问题的原因;出于某种原因, myMainApplication = new Application(customobj);Main.as 中的语句抛出了一个可爱的#1009错误,这通常表示空指针引用或类似的东西。

奇怪的是,我添加了一些日志记录到Application.as,它似乎接收到的引用customObject没有问题;调用intoString()的构造函数会完全返回预期的数据。customObjectApplication

换句话说,myMainApplication = new Application(customobj);Main.as 中的语句似乎同时成功和失败。是什么赋予了?

4

5 回答 5

1

我的猜测是你的转换跨越了应用程序域,所以虽然类型是相同的文件,但在每个应用程序域的内存中它们是 2 个单独的具体类型。有很多方法可以解决这个问题,可能从加载到同级应用程序域而不是子域开始,或者不打扰强制转换并在无类型对象上显式调用有问题的函数。

如果确实是这个问题,WeLoveAppDomain应该会有所帮助。你能举出最小的例子来证明我们无法解构吗?

于 2010-02-10T04:18:43.473 回答
0

确保 Flash Player 中的全局安全设置允许本地访问该目录。

试试这个。转到发布设置-本地播放安全-选择“仅访问网络”。Flash CS4 默认是“仅访问本地文件”,它可能不喜欢。我希望这很有用。

请参阅:http: //www.adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/system/Security.html

于 2010-02-03T21:25:32.927 回答
0

我认为我们需要查看更多代码,但首先要开始:“customobj”......你在哪里定义它?您在其他任何地方都提到“customObject”。那是错字吗?如果该确切声明引发错误,则“customobj”很可能为空。

于 2010-02-07T02:24:25.393 回答
0

您使用的是 FlexBuilder/FlashDevelop 还是 flash IDE?另外,你是如何设置你的预加载器的?

如果您使用 FlexBuilder/FlashDevelop 构建您的应用程序,您是否在编译器选项中指定了帧开始?

于 2010-02-13T11:18:27.580 回答
0

myMainApplication = new Application(customobj);似乎同时成功和失败的原因是我没有完全理解这些try/catch块在 AS3 中的运行方式。在 的构造函数的子例程中抛出了一个空指针异常Application,发生在Application检查以确保它接收到对 customobj 的引用的代码之后。这个错误被 in 的实例周围的块捕获,try/catch因为它是最近的封闭错误检查代码。ApplicationMain

希望我的错误能拯救其他人做出类似的错误!

于 2010-02-18T15:45:41.197 回答