1

我用它来触发 AS3 中的键盘事件:

dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_UP,true,false,_charcode,_keycode));

但我似乎无法弄清楚如何在 AS2 中实现相同的目标,这甚至可能吗?我必须向外部 swf 触发一个关键事件,但我没有 swf 的来源。

4

2 回答 2

0

AS1/2 中没有原生的事件调度系统。AS1/2 使用回调或处理程序。您可以使用http://help.adobe.com/en_US/AS2LCR/Flash_10.0/help.html?content=00002329.htmlEventDispatcher类编写自己的调度系统,但您需要通过自己的代码编写火灾事件。

1 方式:单击 btn 并在操作窗口中写入处理程序:

on (press) {
    // do smth or dispatchEvent
}

2方式:创建按钮,选择它们,在属性面板中设置实例名称(例如btnName),在时间轴框架中使用您的按钮选择并在操作窗口中写入:

btnName.onPress = function () {
    // do smth or dispatchEvent
}
于 2013-04-01T14:13:42.690 回答
0

在 AS2 中调度事件与 AS3 有所不同,因为 AS3 中的大多数类已经扩展了 EventDispatcher 类,但是在 AS2 中,情况并非如此。

对于 AS2,如果不能直接扩展 EventDispatcher 类,有些人选择在创建的类中创建事件调度器对象:

public class Magic extends MovieClip{
    public var _dispatcher:EventDispatcher;

....
....

对于任何事件,该事件最终都会转换为字符串,因此如果您有正确的字符,您可以调度任何事件,而无需使用常量表示:

...
...
...
_dispatcher.dispatchEvent(new KeyboardEvent(KeyboardEvent.UP));
// is the same as the following:
_dispatcher.dispatchEvent(new KeyboardEvent("keyUp"));

因此,您想要做的事情可能是可能的,但这很大程度上取决于原始编码人员如何建模他们的代码。要确定代码的结构,您可以使用您最喜欢的反编译器对 swf 进行反编译,并跟踪“侦听”发生的位置。然后,您可以尝试以“调度”对象为目标,并根据需要模拟调度。

  1. 反编译 swf,找出进行调度的对象,以及进行侦听的对象。
  2. (我猜你正在加载这个外部 swf)。加载 swf,并针对执行调度的影片剪辑/对象:

    var _dispObject = _loadedSwf.mc.mc.mc.dispatchingObject;

  3. 按照您的要求进行调度。

    _dispObject.dispatchEvent(new KeyboardEvent("keyUp"));

于 2013-04-01T14:24:23.293 回答