谁在 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 中拾取分派到事件流的事件?的主要内容,如果未能解决你的问题,请参考以下文章

09-JS的事件流的概念(重点)

JS的事件流的概念(重点)

JS的事件流的概念(重点)

09-JS的事件流的概念(重点)

09-JS的事件流的概念(重点)

ie和dom事件流的区别