捕获按键

在 Flash Player 中,您可以使用全局 on() 处理函数截获按键的内置行为,如下面的示例所示:

/* 当按下左箭头或右箭头键时,处理函数所附加到的影片剪辑的透明度会更改。 */
on (keyPress "<Left>") {
    this._alpha -= 10;
}
on (keyPress "<Right>") {
    this._alpha += 10;
}

当您使用"控制">"测试影片"测试应用程序时,请确保选择了"控制">"禁用快捷键",否则具有内置行为的某些键不会被覆盖。请参见"ActionScript 2.0 语言参考"中 on 处理函数的 keyPress 参数。

您可以使用内置的 Key 类的方法来检测用户最后按下的键。Key 类不需要构造函数;要使用其方法,只需调用该类上的方法即可,如下面的示例所示:

Key.getCode();

您可以获得按键的虚拟键控代码或美国信息交换标准码 (ASCII) 值:

键盘上的每一个实际的键都有一个虚拟键控代码。例如,左箭头键的虚拟键控代码为 37。通过使用虚拟键控代码,可以确保 SWF 文件的控制在每个键盘上都相同,而不用考虑语言或平台。

ASCII 值分配给每个字符集的前 127 个字符。ASCII 值提供了有关屏幕上字符的信息。例如,字母"A"和字母"a"有不同的 ASCII 值。

要确定使用哪些键并确定它们的虚拟键控代码,可使用下面其中一种方式:

所需键的键控代码将出现在"输出"面板中。

通常是在事件处理函数内使用 Key 类方法。在下面的 SWF 文件中,用户可以使用箭头键移动汽车。Key.isDown() 方法表明当前按住的键是左箭头键、右箭头键、上箭头键、还是下箭头键。事件侦听器 Key.onKeyDown 通过 if 语句确定 Key.isDown(keyCode) 的值。根据该值,处理函数会指示 Flash Player 更新汽车的位置并显示方向。

以下示例演示如何捕获按键动作,以便根据相应的方向键(上、下、左或右)在舞台上向上、向下、向左或向右移动影片剪辑。此外,文本字段显示所按下的键的名称。

创建一个能被键盘激活的影片剪辑:

  1. 在舞台上创建一个影片剪辑,该影片剪辑能够随键盘箭头的活动而移动。

    在此示例中,影片剪辑实例名称为 car_mc

  2. 在时间轴上选择第 1 帧;如果看不到"动作"面板,则选择"窗口">"动作"将其打开。
  3. 要设置每次按键时汽车沿屏幕移动的距离,请定义 distance 变量并将它的值设置为 10:
    var distance:Number = 10;
    
  4. 将下面的 ActionScript 代码添加到"动作"面板中现有代码下面:
    this.createTextField("display_txt", 999, 0, 0, 100, 20);
    
  5. 要为汽车影片剪辑创建事件处理函数,以检查当前按下的是哪一个箭头键(向左、向右、向上或向下),请向"动作"面板添加以下代码:
    var keyListener:Object = new Object();
    keyListener.onKeyDown = function() {
    };
    Key.addListener(keyListener);
    
  6. 要检查是否已按下向左箭头键并且随之移动汽车影片剪辑,请将以下代码添加到 onEnterFrame 事件处理函数体中。

    您的代码应如下面的示例所示(新加代码以粗体显示):

    var distance:Number = 10;
    this.createTextField("display_txt", 999, 0, 0, 100, 20);
    var keyListener:Object = new Object();
    keyListener.onKeyDown = function() {
        if (Key.isDown(Key.LEFT)) {
            car_mc._x = Math.max(car_mc._x - distance, 0);
            display_txt.text = "Left";
        }
    };
    Key.addListener(keyListener);
    

    如果按下左箭头键,则汽车的 _x 属性被设置为当前 _x 值减去距离所得的值与 0 值之间的较大值。因此,_x 属性的值绝不会小于 0。此外,Left 一词也应显示在 SWF 文件中。

  7. 使用类似的代码检查是否按下了右箭头键、上箭头键或下箭头键。

    您的完整代码应如下面的示例所示(新加代码以粗体显示):

    var distance:Number = 10;
    this.createTextField("display_txt", 999, 0, 0, 100, 20);
    var keyListener:Object = new Object();
    keyListener.onKeyDown = function() {
        if (Key.isDown(Key.LEFT)) {
            car_mc._x = Math.max(car_mc._x - distance, 0);
            display_txt.text = "Left";
        } else if (Key.isDown(Key.RIGHT)) {
            car_mc._x = Math.min(car_mc._x + distance, Stage.width - car_mc._width);
            display_txt.text = "Right";
        } else if (Key.isDown(Key.UP)) {
            car_mc._y = Math.max(car_mc._y - distance, 0);
            display_txt.text = "Up";
        } else if (Key.isDown(Key.DOWN)) {
            car_mc._y = Math.min(car_mc._y + distance, Stage.height - car_mc._height);
            display_txt.text = "Down";
        }
    };
    Key.addListener(keyListener);
    
  8. 选择"控制">"测试影片"对文件进行测试。

有关 Key 类的方法的更多信息,请参见"ActionScript 2.0 语言参考"中的 Key。