Javascript 在数组中保存keydown并执行
我正在创建一个简单的2d游戏,我想将按键保存到数组中,并在一个循环中执行它们,这样用户就可以握住一个键,让它看起来像是图表绘制者在不停地移动 我得到了一个setInterval函数,它就像一个游戏计时器,它一直在自己循环。我添加了一个侦听器和一个数组来保存密钥 我检查了数组中的键,它看起来很好,但是moveRight和moveLeft函数在某些方面不起作用 代码如下:Javascript 在数组中保存keydown并执行,javascript,jquery,Javascript,Jquery,我正在创建一个简单的2d游戏,我想将按键保存到数组中,并在一个循环中执行它们,这样用户就可以握住一个键,让它看起来像是图表绘制者在不停地移动 我得到了一个setInterval函数,它就像一个游戏计时器,它一直在自己循环。我添加了一个侦听器和一个数组来保存密钥 我检查了数组中的键,它看起来很好,但是moveRight和moveLeft函数在某些方面不起作用 代码如下: this.keysPressed = new Array(); InitGameLoop: functi
this.keysPressed = new Array();
InitGameLoop: function () {
var that = this;
setInterval(function () {
$(document).keydown(function (e) {
var key = e.which;
that.keysPressed.push(key);
for (var i = 0; i < that.keysPressed.length; i++) {
if (that.keysPressed[i] == 38) {
that.moveRight(worldWidth, 10);
}
else if (that.keysPressed[i] == 37) {
that.moveLeft(10);
}
log(that.keysPressed, that.yPos);
that.keysPressed.pop();
}
});
}, 60);
this.keysPressed=new Array();
InitGameLoop:函数(){
var=这个;
setInterval(函数(){
$(文档).keydown(函数(e){
var-key=e.which;
那个。按键。按(键);
对于(var i=0;i
我的问题是:
(对不起我的英语)不要将按下的键存储在一个数组中,让每个键代码激活“移动”数组中的一个相关变量。例如,当按下left时,
movement['left']=1
。使用keyup
将其设置回0
让您的循环检查数组中每个可能的移动,并触发corelance中的相关函数,以在给定时刻激活移动。在setInterval中注册eventhandler总是错误的。在您的情况下,每60毫秒创建一个额外的侦听器,当您按下一个键时,所有侦听器将触发。而且完全不需要将它们存储在数组中。只需注册侦听器一次,每次按下一个键时它都会触发。如果按下多个键,则侦听器将分别为每个键触发
$(document).keydown(function (e) {
var key = e.which;
console.log(key);
// call your according functions here
switch (key){
case 37: // moving left
// do stuff
// set a flag to indicate that you are moving left
moveleft = true;
break;
case 39: // moving right
// do stuff
// set a flag to indicate that you are moving right
moveright = true;
break;
}
});
由于您正在捕获向下键,因此应该设置标志。这样您可以跟踪当前按下的键。在向上键时,您将再次重置这些标志(需要另一个eventhandler).我不明白。只要按下右键,你就想将角色向右移动,左键也一样?我有更多的功能,比如跳跃和射击,但我不能同时按下它们并执行它们。所以我想先存储它们,然后在1后循环执行它们。没有理由将它们存储在数组中。只是处理每个关键点。我尝试过,但当我添加一个跳转到这个,我不能让它看起来像我同时跳转和移动。这很好,它可以工作,但如果我想做一个例子跳转+正确它将不起作用。我可以添加什么来确保我有一个跳转+正确的能力?你需要使用标志并检查你的函数run/move是否设置了相应的标志。例如,如果您向右移动,则设置了正确的标志。现在,如果您跳转,请检查是否设置了移动标志并做出相应的反应(跳转到右侧)。谢谢,我花了一段时间才理解您的建议,但效果比我希望的要好。