在我的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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85
