Flash AS2.0中复杂按键操作的捕获
在我的flash游戏《牧场物语》中的按键操作是比较复杂的,我们用的语言是AS2.0,它的捕获按键并不像我们想象的那样。1当某个键按下不松开的话它会不断的触发该按键事件,但事实我们只想让它执行一次我们想要执行的代码;2当我们想要使用组合键,如C+X,而且是必须C在X前先按下才会触发我们的代码,这个也不是两行代码就能解决的;3对于有些按键,如方向键,我们当然是希望它在按下后不断的执行一些代码,但并不想它跑的那样快,而是减慢速度。对于要想使用这些比较复杂的按键就要下番功夫了,下面是我的游戏中使用解决此问题的方案,供参考,同时也希望得到更好的方案给我分享。
P.S.代码中的keyLock变量表示操作模式,在游戏、帮助、工具葙等里面它们都有方向键,但很显然是不一样的操作,需要变量来区分它们。
1onClipEvent (enterFrame) {
2 if (Key.isDown(67)) {//2-8:C键按下,kissC=1表示C键此时正保持按下状态,kissC=0表示C键此时正保持松开状态,以下同
3 if (_root.kissC == 0) {
4 _root.kissC = 1;
5 }
6 } else if (_root.kissC == 1) {
7 _root.kissC = 0;
8 }
9 if (Key.isDown(90)) {//9-15:Z键由松开状态变成按下状态,执行相应代码并止执行一次
10 if (_root.kissZ == 0) {
11 _root.functionKeyZ();
12 _root.kissZ = 1;
13 }
14 } else if (_root.kissZ == 1) {
15 _root.kissZ = 0;
16 } else if (Key.isDown(88)) {//16-29:X键操作
17 if (_root.kissC == 0) {//17-21:单纯的X键按下操作
18 if (_root.kissX == 0) {
19 _root.functionKeyX();
20 _root.kissX = 1;
21 }
22 } else {//22-24:组合键C+X
23 _root.changeFurnishment();
24 }
25 } else if (_root.kissX == 1) {
26 _root.kissX = 0;
27 if(_root.keyLock == 4){
28 _root.furnishmentEnd = 1;
29 }
30 } else if (Key.isDown(65)) {//30-36:A键,同Z键
31 if (_root.kissA == 0) {
32 _root.functionKeyA();
33 _root.kissA = 1;
34 }
35 } else if (_root.kissA == 1) {
36 _root.kissA = 0;
37 } else if (Key.isDown(27)) {//37-44:Esc键,同Z键
38 if (_root.kissEsc == 0) {
39 _root.functionKeyEsc();
40 _root.kissEsc = 1;
41 }
42 } else if (_root.kissEsc == 1) {
43 _root.kissEsc = 0;
44 }
45 if (Key.isDown(37)) {//45-53:左方向键按下,在不同的操作模式下执行不同的代码,同时变量kissLURD用来减慢执行代码的速度,每隔5次执行一次,以下同理
46 if (_root.keyLock == 0 || _root.keyLock == 1) {
47 _root.functionKeyLeft();
48 } else if (_root.keyLock == 2) {
49 if (_root.kissLURD == 0) {
50 _root.showInfo.goLeft();
51 }
52 _root.kissLURD = (_root.kissLURD+1)%5;
53 }
54 } else if (Key.isDown(38)) {
55 if (_root.keyLock == 0 || _root.keyLock == 1) {
56 _root.functionKeyUp();
57 } else if (_root.keyLock == 2) {
58 if (_root.kissLURD == 0) {
59 _root.showInfo.goUp();
60 }
61 _root.kissLURD = (_root.kissLURD+1)%5;
62 }
63 } else if (Key.isDown(39)) {
64 if (_root.keyLock == 0 || _root.keyLock == 1) {
65 _root.functionKeyRight();
66 } else if (_root.keyLock == 2) {
67 if (_root.kissLURD == 0) {
68 _root.showInfo.goRight();
69 }
70 _root.kissLURD = (_root.kissLURD+1)%5;
71 }
72 } else if (Key.isDown(40)) {
73 if (_root.keyLock == 0 || _root.keyLock == 1) {
74 _root.functionKeyDown();
75 } else if (_root.keyLock == 2) {
76 if (_root.kissLURD == 0) {
77 _root.showInfo.goDown();
78 }
79 _root.kissLURD = (_root.kissLURD+1)%5;
80 }
81 } else {
82 _root.kissLURD = 0;
83 }
84}
85
2 if (Key.isDown(67)) {//2-8:C键按下,kissC=1表示C键此时正保持按下状态,kissC=0表示C键此时正保持松开状态,以下同
3 if (_root.kissC == 0) {
4 _root.kissC = 1;
5 }
6 } else if (_root.kissC == 1) {
7 _root.kissC = 0;
8 }
9 if (Key.isDown(90)) {//9-15:Z键由松开状态变成按下状态,执行相应代码并止执行一次
10 if (_root.kissZ == 0) {
11 _root.functionKeyZ();
12 _root.kissZ = 1;
13 }
14 } else if (_root.kissZ == 1) {
15 _root.kissZ = 0;
16 } else if (Key.isDown(88)) {//16-29:X键操作
17 if (_root.kissC == 0) {//17-21:单纯的X键按下操作
18 if (_root.kissX == 0) {
19 _root.functionKeyX();
20 _root.kissX = 1;
21 }
22 } else {//22-24:组合键C+X
23 _root.changeFurnishment();
24 }
25 } else if (_root.kissX == 1) {
26 _root.kissX = 0;
27 if(_root.keyLock == 4){
28 _root.furnishmentEnd = 1;
29 }
30 } else if (Key.isDown(65)) {//30-36:A键,同Z键
31 if (_root.kissA == 0) {
32 _root.functionKeyA();
33 _root.kissA = 1;
34 }
35 } else if (_root.kissA == 1) {
36 _root.kissA = 0;
37 } else if (Key.isDown(27)) {//37-44:Esc键,同Z键
38 if (_root.kissEsc == 0) {
39 _root.functionKeyEsc();
40 _root.kissEsc = 1;
41 }
42 } else if (_root.kissEsc == 1) {
43 _root.kissEsc = 0;
44 }
45 if (Key.isDown(37)) {//45-53:左方向键按下,在不同的操作模式下执行不同的代码,同时变量kissLURD用来减慢执行代码的速度,每隔5次执行一次,以下同理
46 if (_root.keyLock == 0 || _root.keyLock == 1) {
47 _root.functionKeyLeft();
48 } else if (_root.keyLock == 2) {
49 if (_root.kissLURD == 0) {
50 _root.showInfo.goLeft();
51 }
52 _root.kissLURD = (_root.kissLURD+1)%5;
53 }
54 } else if (Key.isDown(38)) {
55 if (_root.keyLock == 0 || _root.keyLock == 1) {
56 _root.functionKeyUp();
57 } else if (_root.keyLock == 2) {
58 if (_root.kissLURD == 0) {
59 _root.showInfo.goUp();
60 }
61 _root.kissLURD = (_root.kissLURD+1)%5;
62 }
63 } else if (Key.isDown(39)) {
64 if (_root.keyLock == 0 || _root.keyLock == 1) {
65 _root.functionKeyRight();
66 } else if (_root.keyLock == 2) {
67 if (_root.kissLURD == 0) {
68 _root.showInfo.goRight();
69 }
70 _root.kissLURD = (_root.kissLURD+1)%5;
71 }
72 } else if (Key.isDown(40)) {
73 if (_root.keyLock == 0 || _root.keyLock == 1) {
74 _root.functionKeyDown();
75 } else if (_root.keyLock == 2) {
76 if (_root.kissLURD == 0) {
77 _root.showInfo.goDown();
78 }
79 _root.kissLURD = (_root.kissLURD+1)%5;
80 }
81 } else {
82 _root.kissLURD = 0;
83 }
84}
85
作者:Rick Carter
出处:http://pains.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。