我认为最简单的方法是跟踪每个键的附加属性。您不需要检查某个键是关闭还是关闭,您还需要跟踪checkInput()的上一次迭代中键是否关闭。这样,如果“D”键关闭,但不是最后一次迭代,则从ball.speedModifier中减去4。或者,如果“D”键已启动,但在最后一次迭代中未启动,则将4加回到ball.speedModifier。
使这项工作的最后一个关键是在每个checkInput循环结束时,您可以保存每个键是否关闭。然后在checkInput()的下一个循环中,您已准备好再次执行检查。
以下只是伪代码,但希望给出这个想法。
function checkInput(){
if(d.isDown()){
if(!d.wasDown()){
ball.speedModifer -= 4;
}
}else{
if(d.wasDown()){
ball.speedModifier += 4;
}
}
d.wasDown = d.isDown;
}
为了以防万一,我还整理了一个工作示例。请注意三个变化。您的按键不再是一个数组,而是KeyCodes的一个对象,它与您现有KEY对象的VALUES相对应。然后这个键的值是一个对象本身,带有两个“wasDown”和“isDown”键。然后,我在init()的末尾预先填充此对象,然后使用新对象而不是数组在checkInput中执行各种检查和更新。
http://jsfiddle.net/gUgGf/
希望帮助!
SO Q&As应该是独立的。链接到外部粘贴框(特别是如果它们可以交互式地运行代码的话)是很好的,但是应该在问题中包含一个[最小样本](http://sscce.org/)(完整,简明和具有代表性)如果链接的页面被取下或编辑。 – outis 2012-01-14 07:12:02