问题 我要处理鼠标或键盘事件
解决办法 监听和捕获处理鼠标和键盘事件
讨论 处理鼠标和键盘事件很类似于 enterFrame 事件,这些在 1.5 节已经讨论过,只是略有不同。对于 鼠标事件,主程序不会直接接收,需要通过一个可视组件监听它(关于可视组件会在第 5 章讨论)。 下面的例子创建一个 sprite,添加到可视组件列,然后在它上面画了个矩形:
package { import flash.display.Sprite; import flash.events.MouseEvent;
public class ExampleApplication extends Sprite { private var _sprite:Sprite;
public function ExampleApplication( ) { _sprite = new Sprite( ); addChild(_sprite); _sprite.graphics.beginFill(0xffffff); _sprite.graphics.drawRect(0, 0, 400, 400); _sprite.graphics.endFill( );
注意:鼠标事件名称被定义在 MouseEvent 类中,事件处理函数需要传递进一个 MouseEvent 类 实例,现在为 sprite 加入鼠标监听器:
_sprite.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); _sprite.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); }
接着,定义两个处理函数 onMouseDown 和 onMouseUp:
onMouseDown 方法设置画线的类型,移动画刷到鼠标点击位置,然后添加了第三个鼠标监听器监听 MouseMove 事件;onMouseUp 方法用 removeEventListener 方法移除监听器,它和 addEventListener 方法具有相同语法结构,只是作用相反罢了。 最后,定义 onMouseMove 函数
private function onMouseDown(event:MouseEvent):void { _sprite.graphics.lineStyle(1, 0, 1); _sprite.graphics.moveTo(mouseX, mouseY); _sprite.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); }
private function onMouseUp(event:MouseEvent):void { _sprite.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); }
private function onMouseMove(event:MouseEvent):void { _sprite.graphics.lineTo(mouseX, mouseY); } } }
这样就建立了一个事件驱动的绘画程序。 键盘事件的处理简单一些,只需要监听和响应键盘事件,接受这些事件的对象必须出于激活状态。 我们需要在主程序中加入这一行:
stage.focus = this;
下面的例子展示一个简单的类,它监听键盘的 keyDown 事件,输出按键的字符码,
package { import flash.display.Sprite; import flash.events.KeyboardEvent;
public class ExampleApplication extends Sprite { public function ExampleApplication( ) { stage.focus = this; addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown); }
private function onKeyDown(event:KeyboardEvent):void { trace("key down: " + event.charCode); } } }
|