语录提交--登陆--注册--论坛交流--站长博客

AS菜鸟教程8 响应键盘

[作者:thymecd][日期:2008-01-12][导航:Flash教程 >> ActionScript2 >> AS菜鸟教程8 响应键盘]
  

有4种方法可以检测键盘上的按键动作。第1种方法是使用按钮,第2种方法是使用Key对象,第3种方法是使用键盘侦听,第4种方法是使用影片剪辑的keyUp和keyDown事件处理函数。

 

 

 

 

 

 

 

8.1  通过按钮检测按键动作
在按钮的on事件处理函数中不但可以对鼠标事件作出响应,而且可以对键盘事件作出响应。如在按钮的动作面板中加入如下所示的代码,在敲击键盘上的A键时输出窗口中将提示:A is pressed。
on (keyPress "a") {
 trace("A is pressed");
}
检测键盘上的字母键时,字母都应为小写。如果要检测键盘中的特殊键,如方向键,Flash中有一些专门的代码来表示它们,如表8-1所示。
表8-1                             键盘中的特殊键 
<Left> <Right> <Up> <Down> <Space>
<Home> <End> <Insert> <PageUp> <PageDown>
<Enter> <Delete> <Backspace> <Tab> <Escape>
如要检测键盘上的<End>键,可以使用下面的ActionScript:
on (keyPress "<End>") {
 trace("End is pressed");
}
您可以在一个按钮中加入若干个on函数,也可以在一个on函数中结合多种事件,这使您可以为按钮定义快捷键,如下所示:
on (release, keyPress "<Left>") {
 _root.myMC.prevFrame();
}
上面的语句实现单击按钮或按键盘上的左方向键,控制影片剪辑myMC回退1帧。
8.2  影片剪辑的keyUp和keyDown事件
影片剪辑包含两个与键盘相关的事件keyUp和keyDown,使用它们也可以实现对按键事件的响应,如下所示:
onClipEvent (keyDown) {
 trace(Key.getAscii());
}
函数Key.getAscii返回与按键相对应的ASCII码。ASCII码是一个整数,键盘上的每个字符对应一个ASCII码,如字母A对应的ASCII码为65,B对应的ASCII码为66,a对应的ASCII码为97, b对应的ASCII码为98,+对应的ASCII码为43等。只有字符才有ASCII码,键盘上的功能键没有ASCII码。
如果需要在输出窗口中输出与按键相对应的字符,可以使用String对象的fromCharCode函数将ASCII码转换成字符,如将上例的trace命令改成如下所示:
trace(String.fromCharCode(Key.getAscii()));
String对象见动作面板的“对象”/“核心”目录下面。
8.3  Key对象
利用按钮检测按键动作很有效,但是并不利于检测持续按下的键,所以不适合于制作某些通过键盘控制的游戏。
这时,您就需要用到Key对象。Key对象包含在动作面板的“对象”/“影片”目录下面,它由Flash内置的一系列方法、常量和函数构成。使用Key对象可以检测某个键是否被按下,如要检测左方向键是否被按下,可以使用如下ActionScript:
if (Key.isDown(Key.LEFT)) {
 trace("The left arrow is down");
}
函数Key.isDown返回一个布尔值,当该数中的参数对应的键被按下时返回true,否则返回false。常量Key.LEFT代表键盘上的左方向键。当左方向键被按下时,该函数返回true。
Key对象中的常量代表了键盘上相应的键,如表8-2所示。
表8-2                              Key对象中的常量
Key.BACKSPACE Key.ENTER  Key.PGDN 
Key.CAPSLOCK  Key.ESCAPE  Key.RIGHT 
Key.CONTROL  Key.HOME  Key.SHIFT 
Key.DELETEKEY  Key.INSERT  Key.SPACE 
Key.DOWN  Key.LEFT  Key.TAB 
Key.END  Key.PGUP  Key.UP 
以上是键盘上的功能键,那么如何表示键盘上的字母键呢?Key对象提供了一个函数Key.getCode来实现这一功能,如下所示:
if (Key.isDown(Key.getCode("a"))) {
 trace("A is pressed");
}
8.4  键盘侦听
假设在影片剪辑的onClipEvent(enterFrame)事件处理函数中检测按键动作,而影片剪辑所在的时间轴较长,或计算机运算速度较慢,有可能出现这种情况,即当在键盘上按下某个键时还未来得及处理onClipEvent(enterFrame)函数,那么按键动作将被忽略。
还有一个问题就是,在某些游戏(如射击)中,我们需要按一次键就执行一次动作(发射一发子弹),即使长时间按住某个键不放也只能算作一次按键,而Key对象并不能区别是长时间按住同一个键还是快速地多次按键。
在解决这个问题,就需要用到Flash MX中的第3种方法:键盘侦听。when it comes to listening for key presses您可以使用 “侦听器(listener)”来侦听键盘上的按键动作。
要使用侦听器首先需要创建它,您可以使用如下所示的命令来告诉计算机您需要侦听某个事件:
Key.addListener(_root);
Key.addListener命令将主时间轴或某个影片剪辑作为它的参数,当侦听的事件发生时可以用这个参数指定的对象来响应该事件。
上面的代码指定主时间轴来响应该事件。要让主时间轴对该事件作出响应,还需要设置一个相应的事件处理函数。
键盘侦听的事件处理函数有两个:onKeyUp和onKeyDown,如下所示:
_root.onKeyUp = function() {
 trace(Key.getAscii());
};
您也可以使用影片剪辑作为侦听键盘的对象,只需要使用影片剪辑的路径代替_root作为Key.addListener命令的参数。
8.5  练习:键盘控制影片剪辑
文件如图8-1所示,可以通过键盘上的方向键控制影片剪辑运动。当敲击空格键时,瓢虫回到初始位置。

图8-1  键盘控制影片剪辑
文件ladybug.fla,其中包含了一个影片剪辑ladybug。在主场景中选中瓢虫影片剪辑,打开其动作面板,其中添加了如下ActionScript:
onClipEvent (load) {
 x0 = this._x;
 y0 = this._y;
}
onClipEvent (enterFrame) {
 if (Key.isDown(Key.SPACE)) {
  this._x = x0;
  this._y = y0;
  this._rotation = 0;
 }
 if ((Key.isDown(Key.LEFT)) && (Key.isDown(Key.UP))) {
  this._x -= 10/Math.SQRT2;
  this._y -= 10/Math.SQRT2;
  this._rotation = -45;
 } else if ((Key.isDown(Key.LEFT)) && (Key.isDown(Key.DOWN))) {
  this._x -= 10/Math.SQRT2;
  this._y += 10/Math.SQRT2;
  this._rotation = -135;
 } else if ((Key.isDown(Key.RIGHT)) && (Key.isDown(Key.UP))) {
  this._x += 10/Math.SQRT2;
  this._y -= 10/Math.SQRT2;
  this._rotation = 45;
 } else if ((Key.isDown(Key.RIGHT)) && (Key.isDown(Key.DOWN))) {
  this._x += 10/Math.SQRT2;
  this._y += 10/Math.SQRT2;
  this._rotation = 135;
 } else if (Key.isDown(Key.LEFT)) {
  this._x -= 10;
  this._rotation = -90;
 } else if (Key.isDown(Key.RIGHT)) {
  this._x += 10;
  this._rotation = 90;
 } else if (Key.isDown(Key.UP)) {
  this._y -= 10;
  this._rotation = 0;
 } else if (Key.isDown(Key.DOWN)) {
  this._y += 10;
  this._rotation = 180;
 }
 if (this._x>550) {
  this._x = 0;
 }
 if (this._x<0) {
  this._x = 550;
 }
 if (this._y>400) {
  this._y = 0;
 }
 if (this._y<0) {
  this._y = 400;
 }
}
当敲击空格键(Key.isDown(Key.SPACE))时,影片剪辑回到初始位置;当敲击不同的方向键或方向键组合时,相应调整影片剪辑的_x、_y和_rotation属性,从而实现以键盘控制影片剪辑。

[文章热度:]


上一页:AS菜鸟教程7 MC的方法训练

下一页:AS菜鸟教程9 字符串与输入文本的操作

最新话题

网站导航

搜索

网站公告


Copyright 2007 51as.com. Some Rights Reserved.
鄂ICP备07003189号

Powered by: KingCMS 5.0.1.0217