我的动作脚本类中有一个switch语句。我有一个function onKeyDown(event: KeyboardEvent)
,其中包含一个switch语句。它控制不同的键。
但现在我想处理 TAB 键使用两个键 CTRL 和 SPACE 键执行的相同功能。
我想在我的switch语句中添加一个case更多我先按 CTRL 然后 SPACE 键然后调用一个特定的函数。
任何人都可以告诉我在switch语句中如何使用两个键?
private function onKeyDown(event: KeyboardEvent) : void{
if (popUp.displayPopUp){
switch (event.keyCode){
case Keyboard.UP:
case Keyboard.DOWN:
case Keyboard.END:
case Keyboard.HOME:
case Keyboard.PAGE_UP:
case Keyboard.PAGE_DOWN:
inputTxt.selectRange(text.length, text.length)
list.dispatchEvent(event)
break;
case Keyboard.ENTER:
acceptCompletion();
break;
case Keyboard.TAB:
if (requireSelection)
acceptCompletion();
else
popUp.displayPopUp = false
break;
case Keyboard.ESCAPE:
popUp.displayPopUp = false
break;
case Keyboard.CONTROL && Keyboard.SPACE:
if (requireSelection)
acceptCompletion();
else
popUp.displayPopUp = false
break;
}
}
}
答案 0 :(得分:2)
这是一个非常常见的问题。
event.keyCode
只会为您提供最近按下的键的keyCode。所以你必须存储按键和按键发布。幸运的是,AS3是一个非常好的Array实现,可以轻松完成。
var _keys:Array;
addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent);
addEventListener(KeyboardEvent.KEY_UP, keyUpEvent);
function keyDownEvent(e:KeyboardEvent)
{
// turn the key on
_keys[e.keyCode] = true;
// perform logic
keyLogic()
}
function keyUpEvent(e:KeyboardEvent)
{
// turn the key off
_keys[e.keyCode] = false;
}
function keyLogic()
{
// this is where the actual logic is
if(_keys[Keyboard.SPACE] && _keys[Keyboard.CONTROL])
{
if (requireSelection)
acceptCompletion();
else
popUp.displayPopUp = false
}
}
这允许你有一个整洁的小数组,总是告诉你什么键是关闭的。它还将程序逻辑与输入逻辑分开。双赢。
答案 1 :(得分:0)
在您的情况下,您只需检查KeyboardEvent上的ctrlKey
属性即可。但@ DingoEatingFuzz的答案将允许检查组合,如'空格'+'字母'等。
答案 2 :(得分:0)
案例Keyboard.SPACE: if(event.ctrlKey) {
} 打破;
我觉得这个approch很好........