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
posted @ 2007-10-22 10:36  Rick Carter  阅读(2012)  评论(0编辑  收藏  举报