不同的用户事件及其处理函数

鼠标事件

 

AS 3 中鼠标事件发生了显著的变化。在 AS 2 中,影片剪辑会自动添加鼠标侦听器。现在,要手动地为对象添加侦听器。在 AS 3 中鼠标指针经过显示对象时才能触发鼠标事件。在 AS 2 中,无论鼠标指针在哪里,只要执行 mouseDown 或 mouseMove 就会触发所有的影片剪辑。而现在, mouseUp 和 mouseDown 事件与 AS 2 中的 onPress 和 onRelase 等同。鼠标事件的名称是定义好的字符串,像我们之前所提到的,最好使用 MouseEvent 类的属性,以避免输入错误,下面是 MouseEvent 类中所有可用的鼠标事件属性:
CLICK
DOUBLE_CLICK
MOUSE_DOWN
MOUSE_MOVE
MOUSE_OUT
MOUSE_OVER
MOUSE_UP
MOUSE_WHEEL
ROLL_OUT
ROLL_OVER

创建下面这个类,来测试一下,这个类会输出发生在 Sprite 影片上的鼠标事件名称。

package {
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 public class MouseEvents extends Sprite {
  public function MouseEvents() {
   init();
  }
  private function init():void {
   var sprite:Sprite = new Sprite();
   addChild(sprite);
   sprite.graphics.beginFill(0xff0000);
   sprite.graphics.drawCircle(0, 0, 50);
   sprite.graphics.endFill();
   sprite.x = stage.stageWidth / 2;
   sprite.y = stage.stageHeight / 2;
   sprite.addEventListener(MouseEvent.CLICK, onMouseEvent);
   sprite.addEventListener(MouseEvent.DOUBLE_CLICK,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_DOWN,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_MOVE,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_OUT,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_OVER,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_UP,onMouseEvent);
   sprite.addEventListener(MouseEvent.MOUSE_WHEEL,onMouseEvent);
   sprite.addEventListener(MouseEvent.ROLL_OUT,onMouseEvent);
   sprite.addEventListener(MouseEvent.ROLL_OVER,onMouseEvent);
  }
  public function onMouseEvent(event:MouseEvent):void {
   trace(event.type);
  }
 }
}

请注意,每个事件类型都使用了同一个处理函数,输出所触发的事件类型的名称。

鼠标位置

Webjx.Com

除了鼠标事件外,对于文档类还有两个非常重要属性用于表示鼠标当前的位置:mouseX 和 mouseY。请注意,影片剪辑的位置,返回的值是鼠标的位置与影片剪辑的注册点的相对位置。例如,有一个名为 sprite 的 Sprite 影片,在舞台的 100,100 位置,而鼠标的位置在 150,250,你会得到如下结果:
mouseX 为 150
mousey 为 250
sprite.mouseX 为 50
sprite.mouseY 为 150
请注意鼠标位置与影片位置的相对关系。

Webjx.Com

键盘事件 Webjx.Com

键盘事件已被 AS 3 划分到另一个区域中。例如,在 AS 2 中,影片剪辑会自动侦听键盘事件,但只在某种情况下才接收这些事件。所以,最好增加一个专门用来做侦听器的影片剪辑,有时,影片剪辑接收了多个事件但被看 作是一个键盘事件,这样就不对了。在 AS 2 的组成框架中,很大部一部分都是为键盘交互服务的,比如 Flash Player 体系中的:tab(table)管理,焦点(focus)管理及在文本框中对于 Enter 键与 Table 键的处理等。现在好了,键盘事件的名称与鼠标事件的相似,都是定义好的字符串,也可为 KeyboardEvent 类的属性。只有两种:
KEY_DOWN
KEY_UP

我们可以在一个特殊的对象上侦听键盘事件,就像上面那个鼠标侦听的例子一样。为了实现这个功能,我们需要设置对象的焦点,以便能够捕获这些事件,可以这样写:

stage.focus = sprite; Webjx.Com

在很多情况下,侦听键盘事件是否有焦点很有意义,实现它只需直接对舞台进行键盘侦听。下面看一个示例:

Webjx.Com

package {
 import flash.display.Sprite;
 import flash.events.KeyboardEvent;
 public class KeyboardEvents extends Sprite {
  public function KeyboardEvents() {
   init();
  }
  private function init():void {
   stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyboardEvent);
   stage.addEventListener(KeyboardEvent.KEY_UP,onKeyboardEvent);
  }
  public function onKeyboardEvent(event:KeyboardEvent):void {
   trace(event.type);
  }
 }
}

键码

通常人们并不关心一个键是否被按下,而是关心按下的是什么键。使用键盘事件处理有几种方法可以读取输入的信息。前面说到,一个事件处理程序可以由一 个事件对象来触发,该对象包括触发这个事件的数据。在键盘事件中有两个相关的属性,事件所涉及的键:字符码(charCode)和键码 (keyCode)。
字符码指按下的键所表示的真正字符。例如,用户按下”a”键,字符码就是”a”,如果用户同时又按着 shift 键,这样字符码就是”A”。
键 码指按键所代表的数值。如果用户按下”a”键,它所对应的键码为 65,无论是否按着其它键。如果先按下Shift键后按下“a”键,那么会获得两个键盘事件,先是Shift(键码 16)后是 a(键码 65)。 Flash.ui.Keyboard 类同样也有一些属性是针对非字母键的,我们不需要把它们背下来。例如: Keyboard.SHIFT 等于16,当 Shift 键按下后,可以测试其是否等于 Keyboard.SHIFT。请本章的最后一段代码:

package {
 import flash.display.Sprite;
 import flash.events.KeyboardEvent;
 import flash.ui.Keyboard;
 public class KeyCodes extends Sprite {
  private var ball:Sprite;
  public function KeyCodes() {
   init();
  }
  private function init():void {
   ball = new Sprite();
   addChild(ball);
   ball.graphics.beginFill(0xff0000);
   ball.graphics.drawCircle(0, 0, 40);
   ball.graphics.endFill();
   ball.x = stage.stageWidth / 2;
   ball.y = stage.stageHeight / 2;
   stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyboardEvent);
  }
  public function onKeyboardEvent(event:KeyboardEvent):void {
   switch (event.keyCode) {
    case Keyboard.UP :
     ball.y -= 10;
     break;


    case Keyboard.DOWN :
     ball.y += 10;
     break;
    case Keyboard.LEFT :
     ball.x -= 10;
     break;
    case Keyboard.RIGHT :
     ball.x += 10;
     break;
    default :
     break;
   }
  }
 }
}

当我们在 Flash 编辑环境下测试影片时,IDE会拦截用于控制 IDE 自身的键。Tab 键和所有功能键以及作为快捷菜单项的键,在测试影片时不会接收到。不过,我们可以在菜单中选择“控制” -> “禁用快捷键”,来解除限制。这样一来,测试的影片就像在浏览器中工作一样了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值