vini123

博客园 首页 新随笔 联系 订阅 管理

这个是方法一,有局限性。方法二是用数组把按下的键保存起来

 

 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 }

 

 

posted on 2012-09-20 10:32  黑夜丶残枫  阅读(1874)  评论(0)    收藏  举报