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




  
  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.    [SWF(width = "720",height = "450",frameRate = "12",backgroundColor = "0x3366ee")]

  10. /**

  11.    *@ web: http://blog.vini123.com

  12.    *@ explanation 文章来自网上,整理vini。 这个对于键盘控制人物角色八个方向的行走还是比较方便的。

  13.    */

  14. publicclass Main extends Sprite

  15.    {

  16. privatevar key:KeyPoll;

  17. privatevar curPosition:int;

  18. privatevar txt:TextField;

  19. publicfunction Main():void

  20.        {

  21.            addEventListener(Event.ADDED_TO_STAGE,addtoStageHandler);

  22.        }

  23. privatefunction addtoStageHandler(e:Event)

  24.        {

  25.            removeEventListener(Event.ADDED_TO_STAGE,addtoStageHandler);

  26. var txtFormat:TextFormat=new TextFormat();

  27.            txtFormat.size = 14;

  28.            txt=new TextField();

  29.            txt.width=stage.stageWidth-20;

  30.            txt.multiline=true;

  31.            txt.setTextFormat(txtFormat);

  32.            txt.textColor=0xff0000;

  33.            txt.selectable = false;

  34.            txt.mouseEnabled = false;

  35.            txt.x = 10;

  36.            txt.y = 20;

  37.            addChild(txt);

  38.            key = new KeyPoll(stage);

  39.            addEventListener(Event.ENTER_FRAME,enterFrameHandler);

  40.        }

  41. privatefunction enterFrameHandler(e:Event)

  42.        {

  43.            controlKey();

  44.        }

  45. privatefunction controlKey():void

  46.        {

  47. if (key.isDown(Keyboard.UP))

  48.            {

  49. if (key.isDown(Keyboard.LEFT))

  50.                {

  51.                    curPosition = 7;

  52.                }

  53. elseif (key.isDown(Keyboard.RIGHT))

  54.                {

  55.                    curPosition = 8;

  56.                }

  57. else

  58.                {

  59.                    curPosition = 3;

  60.                }

  61.            }

  62. elseif (key.isDown(Keyboard.DOWN))

  63.            {

  64. if (key.isDown(Keyboard.LEFT))

  65.                {

  66.                    curPosition = 5;

  67.                }

  68. elseif (key.isDown(Keyboard.RIGHT))

  69.                {

  70.                    curPosition = 6;

  71.                }

  72. else

  73.                {

  74.                    curPosition = 1;

  75.                }

  76.            }

  77. elseif (key.isDown(Keyboard.LEFT))

  78.            {

  79.                curPosition = 2;

  80.            }

  81. elseif (key.isDown(Keyboard.RIGHT))

  82.            {

  83.                curPosition = 4;

  84.            }

  85.            txt.text = "请按小键盘的上下左右或两个同时一起按,注意看着:" + String(curPosition);

  86.        }

  87.    }

  88. }





  
  1. package com{

  2. import flash.events.KeyboardEvent;

  3. import flash.events.Event;

  4. import flash.display.DisplayObject;

  5. import flash.utils.ByteArray;

  6. publicclass KeyPoll {

  7. privatevar states:ByteArray;

  8. privatevar dispObj:DisplayObject;

  9. publicfunction KeyPoll( displayObj:DisplayObject ) {

  10.            states = new ByteArray();

  11.            states.writeUnsignedInt( 0 );

  12.            states.writeUnsignedInt( 0 );

  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.            dispObj=displayObj;

  20.            dispObj.addEventListener( KeyboardEvent.KEY_DOWN, keyDownListener, false, 0, true );

  21.            dispObj.addEventListener( KeyboardEvent.KEY_UP, keyUpListener, false, 0, true );

  22.            dispObj.addEventListener( Event.ACTIVATE, activateListener, false, 0, true );

  23.            dispObj.addEventListener( Event.DEACTIVATE, deactivateListener, false, 0, true );

  24.        }

  25. privatefunction keyDownListener( ev:KeyboardEvent ):void {

  26.            states[ ev.keyCode >>> 3 ] |= 1 << (ev.keyCode & 7);

  27.        }

  28. privatefunction keyUpListener( ev:KeyboardEvent ):void {

  29.            states[ ev.keyCode >>> 3 ] &= ~(1 << (ev.keyCode & 7));

  30.        }

  31. privatefunction activateListener( ev:Event ):void {

  32. for (var i:int = 0; i < 32; ++i) {

  33.                states[i]=0;

  34.            }

  35.        }

  36. privatefunction deactivateListener( ev:Event ):void {

  37. for (var i:int = 0; i < 32; ++i) {

  38.                states[i]=0;

  39.            }

  40.        }

  41. publicfunction isDown( keyCode:uint ):Boolean {

  42. return ( states[ keyCode >>> 3 ] & (1 << (keyCode & 7)) ) != 0;

  43.        }

  44. publicfunction isUp( keyCode:uint ):Boolean {

  45. return ( states[ keyCode >>> 3 ] & (1 << (keyCode & 7)) ) == 0;

  46.        }

  47.    }

  48. }

第二种方式:




  
  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. publicclass Main extends Sprite

  9.    {

  10. var role:Sprite;

  11. var speed:int = 5;

  12. var keyObj:Object = {};

  13. var keyArr:Array = [];

  14. publicfunction Main():void

  15.        {

  16.            role=new Sprite();

  17.            role.graphics.beginFill(0xff00ff);

  18.            role.graphics.drawRect(10,-40,20,40);

  19.            role.graphics.endFill();

  20.            role.x = 150;

  21.            role.y = 200;

  22.            addChild(role);

  23.            stage.focus = this;

  24.            keyOne();

  25.        }

  26. privatefunction keyOne()

  27.        {

  28.            stage.addEventListener(KeyboardEvent.KEY_DOWN,KeyDownHandler);

  29.            stage.addEventListener(KeyboardEvent.KEY_UP,KeyUpHandler);

  30.        }

  31. privatefunction KeyDownHandler(e:KeyboardEvent)

  32.        {

  33.            keyObj[e.keyCode] = true;

  34. if (keyObj[32])

  35.            {

  36.                trace("space");

  37. //role.y -=  3 * speed;

  38.            }

  39. if (keyObj[37])

  40.            {

  41.                trace("left");

  42.                role.x -=  speed;

  43.            }

  44. if (keyObj[38])

  45.            {

  46.                trace("down");

  47.                role.y -=  speed;

  48.            }

  49. if (keyObj[39])

  50.            {

  51.                trace("right");

  52.                role.x +=  speed;

  53.            }

  54. if (keyObj[40])

  55.            {

  56.                trace("up");

  57.                role.y +=  speed;

  58.            }

  59. if (keyObj[13] && keyObj[17])

  60.            {

  61.                trace("八连杀,好无敌。我要发射了。");

  62. var txt:TextField=new TextField();

  63.                txt.multiline = true;

  64.                txt.wordWrap = true;

  65.                txt.text = "八连杀,好强大。一句就能×××!";

  66.                txt.x=int(50*Math.random());

  67.                txt.y=-int(200*Math.random());

  68. while(role.numChildren>0)

  69.                {

  70.                    role.removeChildAt(0);

  71.                }

  72.                role.addChild(txt);

  73.            }

  74.        }

  75. privatefunction KeyUpHandler(e:KeyboardEvent)

  76.        {

  77.            keyObj[e.keyCode] = false;

  78.        }

  79. privatefunction keyTwo()

  80.        {

  81.            stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);

  82.            stage.addEventListener(KeyboardEvent.KEY_UP,keyUpHandler);

  83.            addEventListener(Event.ENTER_FRAME,enterFrameHandler);

  84.        }

  85. privatefunction keyDownHandler(e:KeyboardEvent)

  86.        {

  87. var num = keyArr.indexOf(e.keyCode);

  88. if (num<0)

  89.            {

  90.                keyArr.push(e.keyCode);

  91.            }

  92.        }

  93. privatefunction keyUpHandler(e:KeyboardEvent)

  94.        {

  95. var num = keyArr.indexOf(e.keyCode);

  96. if (num>=0)

  97.            {

  98.                keyArr.splice(num,1);

  99.            }

  100.        }

  101. privatefunction enterFrameHandler(e:Event)

  102.        {

  103.            trace(keyArr);

  104.        }

  105.    }

  106. }