0

让我先说我对 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”的事件在四处飘荡。

现在我完全迷路了。接下来会发生什么?我想必须有人在某个地方接这个事件并采取相应的行动,但我不知道在哪里搜索。

任何人都可以指导我正确的方向,以了解发送此事件时究竟发生了什么?

4

2 回答 2

0

在 Flash 中调度事件时,可能会发生两件事,具体取决于侦听事件的对象是否在 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”

于 2013-07-29T09:38:55.857 回答
0

如果您正在浏览其他人的代码,您无法真正判断谁将捕获该事件 - 这是一种松散耦合,具有所有优点和缺点。

您可能做的最好的事情是搜索“spectateFeaturedGame”短语的源代码。当有人添加事件侦听器时,它可能会被使用。查看“addEventListener”语法应该会让您了解它是如何工作的。

于 2013-07-29T09:16:30.910 回答