2012-01-14 66 views
-2

我正在开发一个在html5和javascript中的pong redux。我需要帮助修改它,以便在按住D键时,它会从ball.speedModifier变量中减去4,然后在释放D时加上4.原因我不只是在释放键时将修饰符设置回0,是因为我想让多个事物一次一个地改变修饰符,使它们彼此重叠。使用我现有的键盘按键检测系统,变量的增加和减少将以60 FPS重复,而我只希望它发生一次,直到再次减去数量。需要帮助来临时修改变量

这里是我的代码pastie: HTML:http://pastebin.com/txeNftNT
的Javascript:http://pastebin.com/scpBqGqx

+1

SO Q&As应该是独立的。链接到外部粘贴框(特别是如果它们可以交互式地运行代码的话)是很好的,但是应该在问题中包含一个[最小样本](http://sscce.org/)(完整,简明和具有代表性)如果链接的页面被取下或编辑。 – outis 2012-01-14 07:12:02

回答

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; 
} 

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

http://jsfiddle.net/gUgGf/

希望帮助!

+1

哇,这正是我需要的!非常感谢你的帮助! – 2012-01-14 18:01:43

0

我能想到的两个相当简单的方法可以做到你想要什么:

  1. 有一个变量,用于存储基准值,然后每个帧对所有适用的修饰符执行所有计算,而不是直接编辑该值。
  2. 有一个数组名字类似pressedThisFrame您从​​事件推键中,并在主循环您移动条目出pressedThisFrame和你的整体pressedKeys阵列,以及行动的一部分工作涉及实施任何修饰符适当。
+0

这似乎并不适用于我正在尝试做的事情。也许你可以提供一个代码示例? 简而言之,我想让D按下减慢球速度,然后释放D将其恢复到正常速度,但是,我不希望它直接为球的速度设置变量。我反而希望它添加到正在修改球速度的变量中。 – 2012-01-14 06:43:06