将 类 从 SWF 导入 Flex 应用程序而不启动导入的 SWF

Import classes from SWF into Flex app without starting the imported SWF

背景

我想为某个 Flash 游戏编写 AI,作为其中的一部分,我想用游戏元素训练图像识别器。为此,首先我想生成许多具有各种配置的样本,可用作训练数据。

在生成过程中,我必须使用我拥有的 SWF 格式的游戏本身。我的想法是创建我自己的 Flash 应用程序来访问游戏 SWF 并使用其 类 生成图像(我已经使用工具对游戏 SWF 进行了逆向工程,因此我知道我需要哪个 类) .

问题

我创建了一个包含以下内容的 mxml 文件:

<?xml version="1.0"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark"
                       xmlns:mx="library://ns.adobe.com/flex/mx">
    <fx:Script><![CDATA[
        public function onLoad():void {
            var clazz:Class = loader.loaderInfo.applicationDomain.getDefinition("com.game.Foo") as Class;
            // here I will use clazz
        }
        ]]></fx:Script>
    <mx:SWFLoader id="loader" source="GAME.swf" complete="onLoad()" />
</s:WindowedApplication>

问题是当 GAME.swf 加载时,它的主要 MovieClip 自动启动,甚至在我的 onLoad() 事件处理程序之前调用它的构造函数。由于环境与游戏预期的不同,构造函数异常失败,并且从未调用 onLoad()

所以最终的问题是如何实现GAME.swf加载时不启动,但我也在寻找其他与上述不同的建议或解决方案。

解决方案是使用 FFDec 修改 SWF 文件中的字节码,并从主 MovieClip 的构造函数中删除失败的部分。