Individual Entry

mc的onKeyDown/onKeyUp事件

我一直在使用下面的代码响应按键:
var obj = new Object();
obj.onKeyDown = function() {
trace("key down");
};
obj.onKeyUp = function() {
trace("key up");
};
Key.addListener(obj)
//你可以把obj换成你喜欢的任何对象
实际上mc就有onKeyDown/onKeyUp事件的。原则上我们可以通过mc.onKeyDown=function(){...}这样的代码来定义mc的onKeyDown事件,根据帮助,这样定义的前提是必须设置焦点在mc上,需要采用下面的代码设置焦点在mc上:
mc.focusEnabled = true;
Selection.setFocus(mc);
这样,所有的代码就变成下面的样子了:
mc.focusEnabled = true;
Selection.setFocus(mc);
mc.onKeyDown=function(){
trace("key down");
}
测试一下,怎么没有效果?我当初就是这样发现他有点问题的。
跟pawaca讨论了一下,经过更深入的测试,我们得出这样的讨论结果:
首先应该肯定mc确实是有onKeyDown/onKeyUp事件的(也就是说帮助上面提供的信息是正确的),那问题出在哪里呢,假如你的计算机也跟我的计算机一样反应迟钝的话,你就会在发布的一瞬间看到黄色的框框(没错,这个黄色的框就是flash里面默认的焦点框),这就是说,焦点实际上也被设置在mc上了(也就是说设置焦点的那两行语句是没有问题的),当你移动鼠标的时候就会发现黄色的焦点框从屏幕消失了,原来鼠标这个东西很特殊,在这个例子里面,鼠标只要一移动就会将焦点从mc“转移”到鼠标上来(pawaca箴言:别相信Selection.getFocus()),当mc失去焦点,mc的onKeyDown/onKeyUp也无法响应了。
建议大家等待flash9的mouseFocus,以便解决这个问题。
测试使用的flash版本:macromedia flash mx 2004 7.0.1试用版
测试使用的flash播放器:flashplayer 8(具体版本我没有看清楚)
No comments yet:



:

:
:



Meta Information:

Title: mc的onKeyDown/onKeyUp事件
Date posted: 29 Jun '06 - 23:30
Filed under: actionscript
Wordcount: 70 words
Good Karma: 130 (vote)
Bad Karma: 141 (vote)
Next entry:  最近的一点说明
Previous entry:  【翻译】SWF结构规范第四章:显示列表(五)

Frontpage