Flash AS2.0中复杂按键操作的捕获
在我的flash游戏《牧场物语》中的按键操作是比较复杂的,我们用的语言是AS2.0,它的捕获按键并不像我们想象的那样。1当某个键按下不松开的话它会不断的触发该按键事件,但事实我们只想让它执行一次我们想要执行的代码;2当我们想要使用组合键,如C+X,而且是必须C在X前先按下才会触发我们的代码,这个也不是两行代码就能解决的;3对于有些按键,如方向键,我们当然是希望它在按下后不断的执行一些代码,但并不想它跑的那样快,而是减慢速度。对于要想使用这些比较复杂的按键就要下番功夫了,下面是我的游戏中使用解决此问题的方案,供参考,同时也希望得到更好的方案给我分享。
P.S.代码中的keyLock变量表示操作模式,在游戏、帮助、工具葙等里面它们都有方向键,但很显然是不一样的操作,需要变量来区分它们。
1
onClipEvent (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
onClipEvent (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+X23
_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/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。


浙公网安备 33010602011771号