将 类 从 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 的构造函数中删除失败的部分。
背景
我想为某个 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 的构造函数中删除失败的部分。