javascript - 使用通过数组传递的对象时出现问题

标签 javascript arrays undefined

我有一个公共(public)“项目符号”数组,我正在将一个私有(private)项目符号对象插入其中。它具有 x 和 y 属性,我想更改它的 y 属性,这样每次我按下空格键时,它都会创建一个项目符号对象,将其插入 bullets 数组,然后调用一个循环遍历数组并更新每个项目符号的 y 的函数属性(property)。

但是,每次我按空格键时都会出现错误:

未捕获的类型错误:无法读取未定义的属性“y”

这有点超出我的理解范围,我不确定如何编写才能使 bullets 数组中的项目符号对象不是“未定义”。

如果有人有任何建议,我将不胜感激。

   //called every frame
    function playGame()
    {
        movePlayer();
        playerShoot();
        moveBullet();
    }

    //PLAYER SHOOT FUNCTION
    //If the space key is down, player.shoot is true and the bullet object is created.

    function playerShoot()
    {
        if(player.shoot)
        {
            var bullet = Object.create(spriteObject);
            bullet.width = 16;
            bullet.height = 16;
            bullet.x = (player.width - bullet.width) / 2;
            bullet.y = (player.height - bullet.height) / 2;
            bullets.push(bullet);
            player.shoot = false;
        }
    }

    //MOVING THE BULLET
    function moveBullet()
    {
        if(bullets.length !== 0)
        {
            for(var i = 0; i <= bullets.length; i++)
            {
                var bullet = bullets[i];
                console.log("bullet: " + bullet);

                //bullet.y causes error: Uncaught TypeError: Cannot read property 'y' of undefined

                if((bullet.y + bullet.height) >= 0)
                {
                    bullet.y--;
                }
                else
                {
                    bullets.splice[i, 0];
                }
            }
        }
    }

    //RENDERING THE BULLETS
    function renderBullet()
    {
        if(bullets.length !== 0)
        {
            for(var i = 0; i <= bullets.length; i++)
            {
                var bullet = bullets[i];
                bullet.render();
            }
        }
    }

最佳答案

您应该使用 < 而不是 <= 小于或等于将比项目符号数组多迭代一次,从而导致您的循环迭代一个不存在的元素。除了不使用 <= 和使用 < 之外,您还可以检查项目符号是否存在,并且仅在满足条件时才执行 if 或 else block 。

  if((bullet && bullet.y + bullet.height) >= 0) {
      bullet.y--;
  } else {
      bullets.splice(i, 0);
  }

关于javascript - 使用通过数组传递的对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31751088/

相关文章:

javascript - 获取图像 jasmine-Angular 的警告 404

javascript - 如何在没有反斜杠的情况下将 javascript 值作为参数发送

Javascript 数组在数组项之前打印未定义

java - 为什么 DrJava 返回静态错误?

python - 如何将一个列表的元素放入另一个列表的中间?一款一维战舰游戏。 (Python)

JavaScript 按位未定义的陷阱?

javascript - JS 投票系统 {{bindings}} 点击时给出 null?

javascript - 为 promise 设置计时器

javascript - 不同GPoint之间的算法中点

java - Arraylist求助,如何将单个对象添加到列表中?