这个是方法一,有局限性。方法二是用数组把按下的键保存起来
1 package 2 { 3 import com.KeyPoll; 4 import flash.display.Sprite; 5 import flash.events.Event; 6 import flash.ui.Keyboard; 7 import flash.text.TextField; 8 import flash.text.TextFormat; 9 10 [SWF(width = "720",height = "450",frameRate = "12",backgroundColor = "0x3366ee")] 11 12 /** 13 *@ web: http://blog.vini123.com 14 *@ explanation 文章来自网上,整理vini。 这个对于键盘控制人物角色八个方向的行走还是比较方便的。 15 */ 16 public class Main extends Sprite 17 { 18 private var key:KeyPoll; 19 private var curPosition:int; 20 private var txt:TextField; 21 22 public function Main():void 23 { 24 addEventListener(Event.ADDED_TO_STAGE,addtoStageHandler); 25 } 26 private function addtoStageHandler(e:Event) 27 { 28 removeEventListener(Event.ADDED_TO_STAGE,addtoStageHandler); 29 30 var txtFormat:TextFormat=new TextFormat(); 31 txtFormat.size = 14; 32 txt=new TextField(); 33 txt.width=stage.stageWidth-20; 34 txt.multiline=true; 35 txt.setTextFormat(txtFormat); 36 txt.textColor=0xff0000; 37 txt.selectable = false; 38 txt.mouseEnabled = false; 39 txt.x = 10; 40 txt.y = 20; 41 addChild(txt); 42 key = new KeyPoll(stage); 43 addEventListener(Event.ENTER_FRAME,enterFrameHandler); 44 } 45 private function enterFrameHandler(e:Event) 46 { 47 controlKey(); 48 } 49 50 private function controlKey():void 51 { 52 if (key.isDown(Keyboard.UP)) 53 { 54 55 if (key.isDown(Keyboard.LEFT)) 56 { 57 curPosition = 7; 58 } 59 else if (key.isDown(Keyboard.RIGHT)) 60 { 61 curPosition = 8; 62 } 63 else 64 { 65 curPosition = 3; 66 } 67 } 68 else if (key.isDown(Keyboard.DOWN)) 69 { 70 if (key.isDown(Keyboard.LEFT)) 71 { 72 curPosition = 5; 73 74 } 75 else if (key.isDown(Keyboard.RIGHT)) 76 { 77 curPosition = 6; 78 } 79 else 80 { 81 curPosition = 1; 82 } 83 } 84 else if (key.isDown(Keyboard.LEFT)) 85 { 86 curPosition = 2; 87 88 } 89 else if (key.isDown(Keyboard.RIGHT)) 90 { 91 curPosition = 4; 92 } 93 txt.text = "请按小键盘的上下左右或两个同时一起按,注意看着:" + String(curPosition); 94 } 95 } 96 }
1 package com{ 2 import flash.events.KeyboardEvent; 3 import flash.events.Event; 4 import flash.display.DisplayObject; 5 import flash.utils.ByteArray; 6 7 public class KeyPoll { 8 private var states:ByteArray; 9 private var dispObj:DisplayObject; 10 11 public function KeyPoll( displayObj:DisplayObject ) { 12 states = new ByteArray(); 13 states.writeUnsignedInt( 0 ); 14 states.writeUnsignedInt( 0 ); 15 states.writeUnsignedInt( 0 ); 16 states.writeUnsignedInt( 0 ); 17 states.writeUnsignedInt( 0 ); 18 states.writeUnsignedInt( 0 ); 19 states.writeUnsignedInt( 0 ); 20 states.writeUnsignedInt( 0 ); 21 dispObj=displayObj; 22 dispObj.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true ); 23 dispObj.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true ); 24 dispObj.addEventListener( Event.ACTIVATE, activateListener, false, 0, true ); 25 dispObj.addEventListener( Event.DEACTIVATE, deactivateListener, false, 0, true ); 26 } 27 28 private function keyDownListener( ev:KeyboardEvent ):void { 29 states[ ev.keyCode >>> 3 ] |= 1 << (ev.keyCode & 7); 30 } 31 32 private function keyUpListener( ev:KeyboardEvent ):void { 33 states[ ev.keyCode >>> 3 ] &= ~(1 << (ev.keyCode & 7)); 34 } 35 36 private function activateListener( ev:Event ):void { 37 for (var i:int = 0; i < 32; ++i) { 38 states[i]=0; 39 } 40 } 41 42 private function deactivateListener( ev:Event ):void { 43 for (var i:int = 0; i < 32; ++i) { 44 states[i]=0; 45 } 46 } 47 48 public function isDown( keyCode:uint ):Boolean { 49 return ( states[ keyCode >>> 3 ] & (1 << (keyCode & 7)) ) != 0; 50 } 51 52 public function isUp( keyCode:uint ):Boolean { 53 return ( states[ keyCode >>> 3 ] & (1 << (keyCode & 7)) ) == 0; 54 } 55 } 56 }
第二种方式:
1 package 2 { 3 import flash.display.Sprite; 4 import flash.events.Event; 5 import flash.events.MouseEvent; 6 import flash.events.KeyboardEvent; 7 import flash.text.TextField; 8 9 public class Main extends Sprite 10 { 11 var role:Sprite; 12 var speed:int = 5; 13 var keyObj:Object = {}; 14 var keyArr:Array = []; 15 public function Main():void 16 { 17 role=new Sprite(); 18 role.graphics.beginFill(0xff00ff); 19 role.graphics.drawRect(10,-40,20,40); 20 role.graphics.endFill(); 21 role.x = 150; 22 role.y = 200; 23 addChild(role); 24 stage.focus = this; 25 keyOne(); 26 } 27 28 29 30 private function keyOne() 31 { 32 stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownHandler); 33 stage.addEventListener(KeyboardEvent.KEY_UP,KeyUpHandler); 34 } 35 36 private function KeyDownHandler(e:KeyboardEvent) 37 { 38 keyObj[e.keyCode] = true; 39 40 if (keyObj[32]) 41 { 42 trace("space"); 43 //role.y -= 3 * speed; 44 } 45 if (keyObj[37]) 46 { 47 trace("left"); 48 role.x -= speed; 49 } 50 if (keyObj[38]) 51 { 52 trace("down"); 53 role.y -= speed; 54 } 55 if (keyObj[39]) 56 { 57 trace("right"); 58 role.x += speed; 59 } 60 61 if (keyObj[40]) 62 { 63 trace("up"); 64 role.y += speed; 65 } 66 67 if (keyObj[13] && keyObj[17]) 68 { 69 trace("八连杀,好无敌。我要发射了。"); 70 var txt:TextField=new TextField(); 71 txt.multiline = true; 72 txt.wordWrap = true; 73 txt.text = "八连杀,好强大。一句就能爆菊花!"; 74 txt.x=int(50*Math.random()); 75 txt.y=-int(200*Math.random()); 76 while(role.numChildren>0) 77 { 78 role.removeChildAt(0); 79 } 80 role.addChild(txt); 81 } 82 } 83 84 private function KeyUpHandler(e:KeyboardEvent) 85 { 86 keyObj[e.keyCode] = false; 87 } 88 89 private function keyTwo() 90 { 91 stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler); 92 stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler); 93 addEventListener(Event.ENTER_FRAME,enterFrameHandler); 94 } 95 96 private function keyDownHandler(e:KeyboardEvent) 97 { 98 var num = keyArr.indexOf(e.keyCode); 99 if (num<0) 100 { 101 keyArr.push(e.keyCode); 102 } 103 } 104 105 private function keyUpHandler(e:KeyboardEvent) 106 { 107 var num = keyArr.indexOf(e.keyCode); 108 if (num>=0) 109 { 110 keyArr.splice(num,1); 111 } 112 113 } 114 115 private function enterFrameHandler(e:Event) 116 { 117 trace(keyArr); 118 } 119 } 120 }
 
                    
                     
                    
                 
                    
                 
                
 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号