[AS3]AS3.0键盘控制(键盘控制代码示例)(2)
怎么解决呢?只要我们稍微绕一下。例如,声明一个变量,当侦听的键值Down时,变量为true,否则为false。然后在人物那里判断那个变量是否为true就行了。 Control类代码如下。 package { importflash.display.Sprite;
怎么解决呢?只要我们稍微绕一下。例如,声明一个变量,当侦听的键值Down时,变量为true,否则为false。然后在人物那里判断那个变量是否为true就行了。
Control类代码如下。
- package
- {
- import flash.display.Sprite;
- import flash.display.Stage;
- import flash.events.Event;
- import flash.events.KeyboardEvent;
- /**
- * ...
- * @author
- */
- public class Control extends Sprite
- {
- private static var code:uint;
- private static var KeyAry:Array = new Array();
- public static function init(stage:Stage):void
- {
- stage.addEventListener(KeyboardEvent.KEY_DOWN, onKeyDown);
- stage.addEventListener(KeyboardEvent.KEY_UP, onKeyUp);
- }
- private static function onKeyDown(evt:KeyboardEvent):void
- {
- code = evt.keyCode;
- trace("按下了" + code);
- KeyAry[code] = true;
- }
- private static function onKeyUp(evt:KeyboardEvent) :void
- {
- KeyAry[evt.keyCode] = [];
- }
- public static function isDown(KeyCode:uint):Boolean
- {
- return KeyAry[KeyCode] == true;
- }
- }
- }
全场都是静态函数。稍微分析一下吧。声明了code,uint类型(其实这个可有可无),和KeyAry数组(我承认这样的命名很抽。。。)
当键盘按下时,KeyAry数组的第键盘码个元素(= =)就被赋值为true,然后在isDown处返回那个元素是否为true。
在另一边,角色就得到那个元素是否为true了。
代码如下。
- package
- {
- import flash.display.Graphics;
- import flash.display.Shape;
- import flash.display.Sprite;
- import flash.events.Event;
- public class rectObj extends Sprite
- {
- private var rect:Shape = new Shape();
- public function rectObj()
- {
- drawRect();
- addChild(rect);
- this.addEventListener(Event.ENTER_FRAME,EnterFrameHandler);
- }
- private function drawRect():void
- {
- var g:Graphics = rect.graphics;
- g.beginFill(0xFF0000);
- g.drawRect(0,0,50,50);
- g.endFill();
- }
- public function EnterFrameHandler(evt:Event):void
- {
- //w-87,s-83,a-65,d-68
- if(Control.isDown(87)) rect.y -= 5;
- if(Control.isDown(83)) rect.y += 5;
- if(Control.isDown(65)) rect.x -= 5;
- if(Control.isDown(68)) rect.x +=5;
- }
- }
- }
在EnterFrame里判断键盘是否被按下。不断调用Control类的isDown函数返回。
这样,一个比较满意的键盘控制类就完成了。可以八方向行走,同时按多个键的判断,不会出现停顿。
热门文章推荐
- [HLS]做自己的m3u8点播系统使用HTTP Live Streaming(HLS技术)
- [FMS]FMS流媒体服务器配置与使用相关的介绍
- [AS3]什么是M3U8,与HTML5的区别是什么
- AS2.0 让flash自适应全屏,并且不自动缩放
- [AS3]as3.0的sound类常用技巧整理
- [AS3]as3与ByteArray详解、ByteArray介绍、ByteArray用法
- 关于RTMP,RTMPT,RTMPS,RTMPE,RTMPTE协议的介绍
- [JS]分享浏览器弹出窗口不被拦截JS示例
请稍候...