以下内容参考《FLASH MX游戏制作精粹》一书/编著:郭亮/海洋出版社

FLASH游戏专题(一)——如何制作游戏之“检测鼠标、键盘”

学习目的:

掌握鼠标键盘控制,拖动物体、检测碰撞、复制物体、角度、定时器、声音控制、加载等,是游戏制作必须具备的方法技巧。


一、检测鼠标、键盘

对于根舞台来说,用_xmouse和_ymouse动作来检测鼠标的位置,它是按照舞台左上角的坐标为原点(即0坐标点)坐标进行测量的。同样的,影片剪辑中也可以用_xmouse和_ymouse方法来检测鼠标,但鼠标的位置是以影片剪辑的中心点为原点来测量的。

用下面的例子可以检测它们的不同。

影片剪辑“box”(中心点)位于舞台坐标(100,100),box实例的AS:



从上面的代码中可以看到,用四个根时间线上的变量,来存储舞台的鼠标和影片实例自身内部的鼠标x,y轴坐标位置。并用影片剪辑的enterFrame时间来产生一个不断循环的过程,用以对这4个值进行实时的检测。
可以看到舞台鼠标位置和"box"实例的坐标位置正好相差了100。这正是"box"影片剪辑实例相对于舞台原点的距离。由此显示了它们之间的关系。

修改一下上面的代码,可以检测鼠标是否超出了舞台范围:



这是按照舞台大小为550*400作为判断依据的,按Ctrl+Enter键来测试影片,当鼠标移动到这个边界外面时,Output窗口会弹出显示。不过,发布影片的时候,作为调试的Output窗口并不会弹出。

二、检测键盘

1、用按钮检测键盘。

步骤.
----创建按钮
----AS:



用按钮的keyPress事件来检测键盘,是唯一不用进行任何代码检测的方法,相当的方便.但是由于只是检测到键盘被按下时的状态,且不能进行混合键的检测,控制不太灵活,在制作较复杂游戏的时候一般不会采用.


2.影片剪辑检测键盘

在影片剪辑的驱动事件中,有keyDown和keyUp事件,也就是影片剪辑能检测到键盘键被按下时和释放时两个状态,看下面的简单的例子:

----创建叫"onemc"的影片剪辑

----AS:



上式同时运用了keyDown和keyUp事件来检测键盘.


--------------------------
(1) 运用Key对象

问题是按下键盘中的所有键都会产生上面的反应,因此,需要用内置对象Key对象的方法来检测用户上次按下的是什么键.Key对象不需要使用new关键字来产生,要使用它,只需调用该对象自身即可.Key对象有两种方法来获取按键:

要获得上次所按键的虚拟键控代码,可使用getCode方法.

要获得上次所按键的ASCII值,可使用getAscii方法.


键盘上的每个实际的键都有一个虚拟键控代码.例如向左箭头键的虚拟键控代码是37.通过使用虚拟键控代码,可以确保影片的控制在每个键盘上都相同,而不用考虑语言或平台.如下:



Key对象还有众多的属性,它们全部都是和虚拟键控代码关联的常量.如空格键虚拟键控代码为32=Key.SPACE.于是:



Key对象的 isDown方法:

格式: isDown(keycode)

在按下keycode中指定的键时,此方法返回true.

如:




只是不同的是:此方法检测的是键盘是否被按下的动作,所以并不能用keyUp的事件来消除它,而用"Key.getCode() == 键控代码值"是可以
用keyUp的事件的.


但是isDown有它的优点:



上式通过enterFrame方法对键盘进行循环监测,一旦Shift和空格键被同时按下时,执行脚本,这就提供了一个检测组合键的方法.