如何限制JavaScript游戏中的项目符号数量?

时间:2018-03-07 04:14:51

标签: javascript html css arrays

所以这个问题非常糟糕,因为我不知道该问什么,也不知道我想做什么,但......

我有一个我正在制作的游戏,我已经在激光阵列中加入了。它工作正常,但我想限制一次可以在屏幕上的激光数量,所以玩家不会只是垃圾邮件空格键赢。

我尝试通过制作一定数量的子弹来限制它,这些子弹只允许用户进行两次射击,但是当我到达画布顶部时我试图添加子弹,这样他们就可以再次开始拍摄,但它没有拍摄。工作。

我认为这是因为它位于spacePressed中,因此它认为spacePressed是假的,所以它不会在它添加一个子弹的地方运行但是当我把添加的子弹放在spacePressed之外它仍然没有&# 39;工作。

我不确定如何去做我想做的事情,并且会感谢任何想法来解决这个问题。我还必须在以后添加激光在撞击流星时消失并添加一颗子弹,所以我也想帮助解决这个问题。

https://jsfiddle.net/200uaqrn/18/< -before添加任何项目符号

https://jsfiddle.net/200uaqrn/19/< -adding我试图制造有限的子弹

if(spacePressed) {
  if(lasers.y<=laserSize) {
    bullets+=1;
  }
  else{
    drawLaser();
    lasers.forEach(function(laser,index){
      laser.y-=laserdY;
    })
  }
}

同一项目的单独问题我稍后会让多个流星同时下降,我想我会使用一个阵列。但我不知道如何使用该阵列使它们在不同的时间从随机的绳索上掉落等等。

2 个答案:

答案 0 :(得分:1)

&#34;它运行正常,但我想限制屏幕上可以同时显示的激光数量,这样玩家就不会只是通过空格键来获胜。&#34;

所以听起来你想做的不是限制子弹数量,而是限制玩家射击的能力。您可以确保在播放器再次拍摄之前必须经过一段时间(十分之一秒?)。

关于随机数,请参阅后面的示例here,了解如何获取某个范围内的随机数。

答案 1 :(得分:1)

对于激光,您可以尝试使用超时设置功能:

var canFire = true;

function allowFire() {
    canFire = true;
}

function newLaser() {
    this.x = turretX
    this.y = canvas.height - 75
    canFire = false;
    setTimeout(allowFire, 3000);
}

document.addEventListener("keydown", keyDownHandler, false);
document.addEventListener("keyup", keyUpHandler, false);

function keyDownHandler(e) {
    if (e.keyCode === 39) {
        rightPressed = true;
    } else if (e.keyCode === 37) {
        leftPressed = true;
    }
    if (e.keyCode === 32 && canFire == true) {
        spacePressed = true;
        lasers.push(new newLaser())
    }
}

请注意,3000就是那里的冷却时间。

这将限制屏幕中同时的子弹数量,因为玩家每隔x毫秒只能射击一次,如果你想要精确数量的子弹,你可以做{{ 1}}对于具有所需金额的人,然后每次播放器按空格时删除一个,并在此处检查var> 0

对于流星,如果你打算使用数组,让它们随机变化你可以使用这个函数(在Mozilla Developers中找到):

(e.keyCode === 32 && canFire == true)

所以你可以使用它作为坐标,也可以使用随机时间使用超时(如上所述),使用它(来自同一来源):

function getRandomInt(max) {
  return Math.floor(Math.random() * Math.floor(max));
}

如果它是一个数组,您可以像function getRandomArbitrary(min, max) { return Math.random() * (max - min) + min; } 一样使用getRandomArbitrary(i * 1000, i * 3000)作为i循环中的索引。这取决于你想要他们如何具体工作,有很多方法可以做到这一点,一个自称,循环等功能。