Flash actionscript 2.0 - Keys isDown和isToggled替代方案

时间:2013-08-27 10:41:20

标签: flash actionscript

我想要一些代码只在按下某个键时激活一次。

在某些C风格的库中,比如SDL,其中会生成“Key-Down”事件,然后在您提起密钥时会生成“Key-Up”事件。

可以在actionscript 2.0中执行类似的操作,而不仅仅是'isDown'或'isToggled'。

我最接近这样的事情是使用像这样的布尔变量

var done:Boolean = false
if ( Key.isDown ( Key.SPACE ) && done == false )
{
//code here
done = true;
}

'//代码在这里'只会在按下键时运行一次,这就是我想要的,但我不想为我想要检查的每个键创建一个单独的变量,只是看起来“无效”如果你知道我的意思。

1 个答案:

答案 0 :(得分:0)

您可以向Key对象添加静态事件侦听器。但是,只要用户按住按键,按键事件将继续按间隔触发。正如你所说,你可以用布尔值检测到这一点。或者如果你想要一个更通用的解决方案的布尔地图。此地图会告诉您当前哪些键已关闭,因此您可以判断按键事件是对应于实际按下该键的用户还是只是按住该键。

var listener:Object = {};
var downMap:Array = [];
listener.onKeyDown = function():Void {
    if(!downMap[Key.getCode()]) {
        trace("first key down:" + Key.getCode());
        downMap[Key.getCode()] = true;
    }
    trace("down:" + Key.getCode());

};
listener.onKeyUp = function():Void {
    trace("up:" + Key.getCode());
    downMap[Key.getCode()] = false;
};
Key.addListener(listener);