谁在 AS3 中拾取分派到事件流的事件?
Posted
技术标签:
【中文标题】谁在 AS3 中拾取分派到事件流的事件?【英文标题】:Who picks up events dispatched to the event flow in AS3? 【发布时间】:2013-07-28 23:50:39 【问题描述】:让我先说我对 AS3、Flash 或类似的东西一无所知,因此我的麻烦是,我确实有一般的编程经验,所以我熟悉基本概念。
我目前正在对 SWF 进行逆向工程,以了解并可能修改其行为。我已经反编译了源代码并对其进行了挖掘,以便找出单击特定按钮时会发生什么。
我已将范围缩小到以下几点:
var _loc2_:ILandingPageContext = getFirstContext(ILandingPageContext);
logger.logDebug(_loc2_ + " try to join game");
var _loc3_:String = JSON.stringify(this._model.getCurrentFeaturedGame());
_loc2_.getSharedEvents().dispatchEvent(new DataEvent("spectateFeaturedGame",true,false,_loc3_));
通过阅读我收集到的 AS 文档,这会将 DataEvent 分派到事件流 - 我猜现在有一个名为“spectateFeaturedGame”的事件漂浮在周围。
现在我完全迷路了。接下来会发生什么?我想必须有人在某个地方接听这个事件并采取相应的行动,但我不知道在哪里搜索。
任何人都可以指导我正确的方向,以了解发送此事件时究竟发生了什么?
【问题讨论】:
【参考方案1】:如果您正在浏览其他人的代码,您无法真正确定谁将捕获该事件 - 这是一种松散耦合,具有所有优点和缺点。
最好的办法是在源代码中搜索“spectateFeaturedGame”短语。当有人添加事件侦听器时,它可能会被使用。查看“addEventListener”语法应该会让您了解它是如何工作的。
【讨论】:
我已经搜索过这个短语,它没有出现在代码中的其他任何地方,所以我猜它必须在另一个文件中......有没有办法找出哪个文件可能是? 这取决于您使用的 IDE。如果在反编译后得到多个 .as 文件,那么任何允许您搜索多个文件的程序都应该没问题 - 例如在 Notepad++ 中,您可以按 CTRL+F 来“在文件中查找”。【参考方案2】:在 Flash 中调度事件时,可能会发生 2 件事,具体取决于侦听事件的 Object 是否在 DisplayList 上。
无显示列表: 这是最简单的情况,事件直接分派给监听器(每个对象都有一个内部监听器列表)。
显示列表: 这些是鼠标单击、键盘事件等事件。事件被分派到舞台,它们在舞台上向下穿过显示列表,直到它们到达您的对象:
(click event)
Stage
- Parent
- Child (listener)
阶段 Stage->Parent 被称为捕获阶段。然后事件会影响您的孩子。然后它返回显示列表(这次是 Parent->Stage)顺序。这是泡沫阶段。
AS3 中addEventListener()
的文档在这里:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/events/EventDispatcher.html#addEventListener()
您可以在此处阅读有关事件流程的更多信息:http://help.adobe.com/en_US/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7e4f.html
对于您的特定情况,如果您想找到监听对象,请按照 quarion 的建议执行并搜索“addEventListener”或更好的是“spectateFeaturedGame”
【讨论】:
以上是关于谁在 AS3 中拾取分派到事件流的事件?的主要内容,如果未能解决你的问题,请参考以下文章