处理交互对象的键盘事件 键盘事件都是由KeyboardEvent类来管理,其事件只有keyDown和keyUp两个,分别代表按下键 和释放键。这两个事件的事件名用KeyboardEvent类的类属性KEY_DOWN和KEY_UP来表示。
KeyboardEvent类同时同时定义了一些属性和方法来辅助键盘事件的处理: altKey Alt键是否可用 charCode 键的ASCII码 ctrlKey Ctrl键是否可用 keyCode 键控代码值 keyLocation 键在键盘中的位置 shiftKey Shift键是否可用 其中Code属性最常用,它常常判断某个键是否按下或释放,例如,keyDown事件只是判断键是 否按下,如果要判断某个键是否按下,就需使用keyCode属性来判断。
KeyboardEvent类的方法: KeyboardEvent() 构造函数用于创建实例 clone() 复制实例 toString() 返回全部属性的字符串 updateAfterEvent() 更新显示,与设置的帧速无关
打开FLASH面板,把图层1的名称改为as的图层,单击as图层的第1帧,打开动作面板,输入下列 代码: import flash.events.KeyboardEvent; import flash.text.TextField; import flash.events.Event;
//为舞台注册按下事件帧听器 stage.addEventListener (KeyboardEvent.KEY_DOWN,keyDown); //定义键盘按下事件侦听器函数 function keyDown(e:KeyboardEvent):void { //得到键的ASCII码 var keyCode:uint=e.charCode; //把ASCII码转换为字符 var str:String =String.fromCharCode(keyCode); //创建动态文本实例 var txt:TextField=new TextField(); //显示字符 txt.text=str; //x坐标在舞台中随机分布 txt.x=Math.random()*550; //设置y坐标 txt.y=400; //为动态文本注册enterFrame事件侦听器 txt.addEventListener(Event.ENTER_FRAME,txtMove); //把动态文本实例添加到主时间轴下 this.addChild (txt); } //定义enterFrame事件侦听器 function txtMove(e:Event):void { //获取动态文本 var txt:TextField =e.target; //根据缓冲公式设置缓冲效果 txt.y+=(Math.random()*400-txt.y)/10; //如果超出舞台的上方 if(txt.y<1) { //移除enterFrame事件侦听器 txt.removeEventListener (Event.ENTER_FRAME ,txtMove); //从主时间轴下移除动态文本实例 this.removeChild(txt); } }
代码中用到的缓冲公式是用于缓冲效果的,缓冲公式如下: 显示实例.x+=(终点x坐标-显示实例.x)/速度 显示实例.y+=(终点y坐标-显示实例.y)/速度 设置了缓冲公式后,显示实例就可以从起点以从快到慢的速度到达终点,但实际上不是到达终点 而是接近终点。因此在判断显示实例是否超出舞台上方时,判断的条件是txt.y<1,而不是 txt.y<0