javascript - 如何限制 JavaScript 游戏中的子弹数量?

标签 javascript html css arrays

所以这个问题真的很糟糕,因为我不知道该问什么,也不知道我想做什么,但是...

我有一个正在创建的游戏,我已经为激光添加了一个数组。它工作正常,但我想限制一次可以在屏幕上显示的激光数量,这样玩家就不会只是通过空格键来取胜。

我尝试通过制作一定数量的子弹来限制它,这只允许用户射击两次但是我试图在它到达 Canvas 顶部后添加回子弹以便他们可以再次开始射击但它没有用.

我假设这是因为它在 spacePressed 内,如果它认为 spacePressed 是假的,所以它不会在它添加一颗子弹的地方运行,但是当我把添加的子弹放在 spacePressed 之外时它仍然不起作用.

我不确定如何着手做我想做的事情,如果有任何解决此问题的想法,我将不胜感激。我还必须稍后添加激光在击中 meteor 时消失并添加一颗子弹的位置,所以我也想帮助解决这个问题。

https://jsfiddle.net/200uaqrn/18/ <-在添加任何元素符号之前

https://jsfiddle.net/200uaqrn/19/ <-添加我尝试创建有限的子弹

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

对于同一个元素,我还要单独提出问题,我稍后会让多个 meteor 同时坠落,我假设我会为此使用一个数组。但我不知道如何使用该阵列使它们在不同时间从随机的 y 绳索上掉落,等等。

最佳答案

对于激光,你可以尝试只设置一个带超时的函数:

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毫秒射击一次,如果你想要精确数量的子弹,你可以做一个var 为他们添加所需的数量,然后每次玩家按下空格时删除一个,并在此处检查 > 0:(e.keyCode === 32 && canFire == 真)

对于 meteor ,如果你要使用数组,要使它们随机落下,你可以使用这个函数(在 Mozilla Developers 中找到):

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) 那样使用它,因为 ifor 中的索引> 循环。这取决于您希望它们工作的具体程度,有很多方法可以做到这一点,一个调用自身的函数,while 循环等。

关于javascript - 如何限制 JavaScript 游戏中的子弹数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49144014/

相关文章:

javascript - 设置 CSS 对象的旋转点

html - 无法将我的 Mailchimp 列表连接到我的登陆页面

html - 如何使页脚接触边缘?

html - 为什么我的导航栏覆盖了 Fancybox,我该如何解决?

javascript - 异步检查文件夹内容并返回文件路径

javascript - Ember 模板中的 "Rolling back"错误状态

javascript - window.location.assign(url) 与 window.location = url?

html - Div 位于另一个 div 的一 Angular

html - 如何使文本与图像对齐

javascript - 根据浏览器、兼容性等将类附加到主体标记