我有几个不能从游戏中暂停的 Flash 游戏。我想写一个允许我暂停它们的包装器 swf。重新编译游戏是不可行的,因此无法向其中添加任何功能。
我可能需要做的是控制加载的 swf 何时获取 ENTER_FRAME 事件并将对 flash.utils.getTimer 的调用重定向到包装器中定义的函数。这可以通过修改加载的 ApplicationDomain 对象的 domainMemory ByteArray 来完成吗?
我有几个不能从游戏中暂停的 Flash 游戏。我想写一个允许我暂停它们的包装器 swf。重新编译游戏是不可行的,因此无法向其中添加任何功能。
我可能需要做的是控制加载的 swf 何时获取 ENTER_FRAME 事件并将对 flash.utils.getTimer 的调用重定向到包装器中定义的函数。这可以通过修改加载的 ApplicationDomain 对象的 domainMemory ByteArray 来完成吗?
domainMemory
肯定对你没有帮助,它只是访问快速内存的API。
您可以尝试做的是反编译游戏 swf 并找到主 EnterFrame 事件的调度程序(并且在加载游戏 swf 后,您必须通过显示列表找到此调度程序,例如,如果它不是舞台或root), 用作游戏滴答调度器,然后您将能够拦截此调度器的默认 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();
}