需要帮助临时修改变量

时间:2012-01-14 06:32:37

标签: javascript variables

我正在开发html5和javascript中的pong redux。我需要帮助修改它,以便在按住D时,它将从ball.speedModifier变量中减去4,然后在释放D时添加4.我不仅仅在释放键时将修改器设置回0,是因为我希望有多个东西一次改变修改器,它们堆叠在一起。使用我当前用于检测按键的系统,变量的加法和减法将以60 FPS重复,而我只希望它发生一次,直到再次减去该数量。

以下是我的代码的一个例子: HTML:http://pastebin.com/txeNftNT
Javascript:http://pastebin.com/scpBqGqx

2 个答案:

答案 0 :(得分:0)

我可以想到两种相当简单的方法来做你想做的事情:

  1. 有一个存储基值的变量,然后每个帧执行所有适用修饰符的计算,而不是直接编辑值。
  2. 有一个名为pressedThisFrame的数组,您可以从keydown事件中推送密钥,并在主循环中将条目从pressedThisFrame移出并转移到您的整体pressedKeys {1}}数组,部分移动涉及执行适当的修饰符。

答案 1 :(得分:0)

我认为最简单的方法是跟踪每个密钥的其他属性。您还需要在上一次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;
}

为了以防万一,我还汇总了一个有效的例子。请注意三个变化。您的pressedKeys不再是数组,而是KeyCodes的对象,它对应于现有KEY对象的VALUES。然后这个键的值是一个对象本身,有两个键“wasDown”和“isDown”。然后,我在init()的末尾预先填充此对象,然后使用新对象而不是数组在checkInput中执行各种检查和更新。

http://jsfiddle.net/gUgGf/

希望这有帮助!

相关问题