背景
我想为某个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
不能启动,但我也在寻找与上述不同的其他建议或解决方案。
答案 0 :(得分:0)
解决方案是使用FFDec修改SWF文件中的字节代码,并从主MovieClip的构造函数中删除失败的部分。