修改加载的SWF的域内存以控制行为

时间:2013-01-25 10:51:08

标签: actionscript-3 bytearray swfloader applicationdomain

我有几个不能在游戏中暂停的Flash游戏。我想写一个包装swf,允许我暂停它们。重新编译游戏是不可行的,因此不能添加任何功能。

我可能需要做的是控制何时加载的swf获取ENTER_FRAME事件并将对flash.utils.getTimer的调用重定向到包装器中定义的函数。可以通过修改加载的ApplicationDomain对象的domainMemory ByteArray来完成吗?

1 个答案:

答案 0 :(得分:0)

domainMemory绝对无法帮助您,it's just API可以访问快速内存。

你可以尝试做的是反编译游戏swf并找到主要的EnterFrame事件的调度员(并且在加载游戏swf之后你必须通过显示列表找到这个调度员,例如,如果它没有结果用作游戏刻度调度程序的阶段或根目录,而不是您可以拦截此调度程序的默认EnterFrame事件。对于拦截,只需添加具有更高优先级的自己的侦听器:

//pause the game
dispatcher.addEventListener(Event.ENTER_FRAME, onGameEnterFrame, false, 1);
//resume the game
dispatcher.removeEventListener(Event.ENTER_FRAME, onGameEnterFrame);

protected function onGameEnterFrame(event:Event):void
{
    event.stopImmediatePropagation();
}