·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]AS3.0键盘控制(键盘控制代码示例)(2)

时间:2012-09-28 16:13CuPlayer
怎么解决呢?只要我们稍微绕一下。例如,声明一个变量,当侦听的键值Down时,变量为true,否则为false。然后在人物那里判断那个变量是否为true就行了。 Control类代码如下。 package { importflash.display.Sprite;

  怎么解决呢?只要我们稍微绕一下。例如,声明一个变量,当侦听的键值Down时,变量为true,否则为false。然后在人物那里判断那个变量是否为true就行了。
Control类代码如下。

  1. package   
  2. {  
  3.         import flash.display.Sprite;  
  4.         import flash.display.Stage;  
  5.         import flash.events.Event;  
  6.         import flash.events.KeyboardEvent;  
  7.         /**  
  8.          * ...  
  9.          * @author   
  10.          */  
  11.         public class Control extends Sprite  
  12.         {  
  13.                 private static var code:uint;  
  14.                 private static var KeyAry:Array = new Array();  
  15.                   
  16.                 public static function init(stage:Stage):void   
  17.                 {  
  18.                         stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);  
  19.                         stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);  
  20.                 }  
  21.                   
  22.                   
  23.                 private static function onKeyDown(evt:KeyboardEvent):void  
  24.                 {  
  25.                         code = evt.keyCode;  
  26.                         trace("按下了" + code);  
  27.                         KeyAry[code] = true;  
  28.                 }  
  29.                   
  30.                   
  31.                 private static function onKeyUp(evt:KeyboardEvent) :void  
  32.                 {  
  33.                         KeyAry[evt.keyCode] = [];  
  34.                 }  
  35.                   
  36.                   
  37.                 public static function isDown(KeyCode:uint):Boolean  
  38.                 {  
  39.                         return KeyAry[KeyCode] == true;  
  40.                 }  
  41.         }  
  42.           

  全场都是静态函数。稍微分析一下吧。声明了code,uint类型(其实这个可有可无),和KeyAry数组(我承认这样的命名很抽。。。)
  当键盘按下时,KeyAry数组的第键盘码个元素(= =)就被赋值为true,然后在isDown处返回那个元素是否为true。
  在另一边,角色就得到那个元素是否为true了。
代码如下。

  1. package  
  2. {  
  3.         import flash.display.Graphics;  
  4.         import flash.display.Shape;  
  5.         import flash.display.Sprite;  
  6.         import flash.events.Event;  
  7.           
  8.         public class rectObj extends Sprite  
  9.         {  
  10.                 private var rect:Shape = new Shape();  
  11.                 public function rectObj()  
  12.                 {  
  13.                         drawRect();  
  14.                         addChild(rect);  
  15.                         this.addEventListener(Event.ENTER_FRAME,EnterFrameHandler);  
  16.                 }  
  17.                 private function drawRect():void  
  18.                 {  
  19.                         var g:Graphics = rect.graphics;  
  20.                         g.beginFill(0xFF0000);  
  21.                         g.drawRect(0,0,50,50);  
  22.                         g.endFill();  
  23.                 }  
  24.                 public function EnterFrameHandler(evt:Event):void  
  25.                 {  
  26.                         //w-87,s-83,a-65,d-68  
  27.                         if(Control.isDown(87)) rect.y -5;  
  28.                         if(Control.isDown(83)) rect.y += 5;  
  29.                         if(Control.isDown(65)) rect.x -5;  
  30.                         if(Control.isDown(68)) rect.x +=5;  
  31.                 }  
  32.         }  

  在EnterFrame里判断键盘是否被按下。不断调用Control类的isDown函数返回。
  这样,一个比较满意的键盘控制类就完成了。可以八方向行走,同时按多个键的判断,不会出现停顿。

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器