Javascript,只拍一次激光

时间:2016-09-29 20:55:33

标签: javascript

我想要函数shootLaser();只发射一次,下面的代码是尝试使用变量来控制shootLaser()失败,只是在我击中​​空格键后才让它射击一次但是如果我再次击中空格键则不会再次射击;通过使用一旦激光被击中一次就增加的变量。想知道如何实现这个目标吗?

function keyBoardInput() {
var i = event.keyCode;


  if (i == 32) {
  var g = 0;
    if (g < 1) {
       shootLaser();
     g++;/**now that g is incremented IF statement shouldNOT allow shooting?**/
    };
  };

3 个答案:

答案 0 :(得分:1)

您始终将g重新声明为0,因此它始终小于1.将var g = 0放在函数外部。

答案 1 :(得分:1)

我自己还不熟悉JavaScript,但我认为变量g是函数的局部范围,因此每次运行keyBoardInput函数时,它都会将var g重置为0.如果它包含在一个闭包中,那么var g将保留其可能有效的值,或者如果变量在函数之外,那么函数每次都不会重置它。

答案 2 :(得分:1)

尝试在函数外部移动声明var g = 0;。这样它每次都不会被设置为0。见下面的例子:

&#13;
&#13;
document.addEventListener('keyup',keyBoardInput);
  var g = 0;
function keyBoardInput(event) {
var i = event.keyCode;
  if (i == 32) {
    if (g < 1) {
       shootLaser();
     g++;/**now that g is incremented IF statement shouldNOT allow shooting?**/
    }
  }
}
function shootLaser() { 
      console.log('shooting laser');
}
&#13;
Press space to fire the Laser
&#13;
&#13;
&#13;

你可以做的一个简化是将g的递增移动到if语句中 - 因为它是一个后增量,它不会影响该值直到条件之后:

if (g++ < 1) {  //g will now be incremented and we checked if it was less than 1
    shootLaser();
}