我正在用JavaScript编写一个简单的游戏,它已经处理了基本的键盘输入,如下所示:
var input = {};
document.onkeydown = function(e) {
input[e.keyCode] = true;
}
document.onkeyup = function(e) {
input[e.keyCode] = false;
}
while (!done) {
handleInput(input);
update();
render();
}
现在我需要游戏来处理关键组合(例如CTRL + X)。我希望它仅在keyup
上接受这样的组合。
编辑:修改键不需要与" main"同时进行全部操作。键。的 /修改
我想到的两种可能的解决方案是:
keyup
事件列表的数组(对象带有#34; main"键加修饰符)。每次轮询时,handleInput
函数都会负责排空队列handleInput
内的可能关键组合(观察按住修改键)并在" main"时触发组合行为。钥匙上升(我实际上并不喜欢这样)您是否建议我使用优雅的方式扩展当前的功能?
答案 0 :(得分:1)
您所要做的就是创建upInput
变量,在其中存储您的密钥键。然后,要检查是否按下了组合,您必须检查是否只有CTRL + C
(或17,67)变量中的组合,如果所有这些都是true
。然后轻松打印您的消息并重置upInput
变量。
var input = upInput = {};
document.onkeydown = function(e) {
input[e.keyCode] = true;
if (JSON.stringify(Object.keys(upInput)) != '["17","67"]')
upInput = {};
}
document.onkeyup = function(e) {
var k = e.keyCode;
input[k] = false;
if ([17, 67].indexOf(k) > -1)
upInput[k] = true;
if (JSON.stringify(Object.keys(upInput)) == '["17","67"]'
&& upInput[17] && upInput[67]) // CTRL + C
alert('YES!'),
upInput = {};
}
希望有所帮助!
答案 1 :(得分:1)
试试这个;) 当您按CTRL + X并释放其中一个(或两个)时,它将显示一条消息
var map = {17: false, 88: false};
var fire_event = false;
window.addEventListener('keydown', function(e) {
if (e.keyCode in map) {
map[e.keyCode] = true;
if (map[17] && map[88]) {
fire_event = true;
}
}
}, false);
window.addEventListener('keyup', function(e) {
if (e.keyCode in map) {
map[e.keyCode] = false;
}
if (fire_event) {
fire_event = false;
alert('YOU PRESSED CTRL + X');
}
}, false);
答案 2 :(得分:0)
我会以其中一种方式做到:
答案 3 :(得分:0)
尝试它是否有效:
var KEY_QUEUE = [];
var KEYs = [17, 88];
document.onkeydown = function (e) {
if (KEY_QUEUE.indexOf(e.keyCode) === -1) {
KEY_QUEUE.push(e.keyCode);
}
};
document.onkeyup = function (e) {
var index = KEY_QUEUE.indexOf(e.keyCode);
if ( isSubArray(KEYs, KEY_QUEUE)
&& KEYs.indexOf(e.keyCode) > -1 ) {
console.log("You press CTRL + X");
}
KEY_QUEUE.splice(index, 1);
};
function isSubArray(ary, targetAry) {
return new RegExp(ary.toString()).test(targetAry.toString());
}
我检查了一些案例,例如Ctrl x
,x Ctrl
,Ctrl x a
,Ctrl a x
,它的工作原理与我预期的一样。但我不确定你的想法是否相同。