Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我的控制台会说;无法设置属性';src&x27;“未定义”的定义;?_Javascript - Fatal编程技术网

Javascript 为什么我的控制台会说;无法设置属性';src&x27;“未定义”的定义;?

Javascript 为什么我的控制台会说;无法设置属性';src&x27;“未定义”的定义;?,javascript,Javascript,所以我试图用画布创建一个游戏,但其中一个动画有问题。它说它不能将src属性设置为“undefined”。我不明白为什么它是未定义的,所以我需要这方面的帮助。这是我的全部代码: var c = document.getElementById("game"); var ctx = c.getContext("2d"); //variables pX = 0; pY = 0; frame = 0; frames = [] //load image sprites var

所以我试图用画布创建一个游戏,但其中一个动画有问题。它说它不能将src属性设置为“undefined”。我不明白为什么它是未定义的,所以我需要这方面的帮助。这是我的全部代码:

var c = document.getElementById("game");
var ctx = c.getContext("2d");

  //variables
  pX = 0;
  pY = 0;
  frame = 0;
  frames = []

  //load image sprites
  var player = new Image();
  var aster = new Image();
  var enemy = new Image();
  var max = new Image();
  var animatedPlayer = new Image();

  player.src = "player.png";
  aster.src = "aster.png";
  enemy.src = "enemy.png";
  max.src = "max.png";
  animatedPlayer.src = "animatedPlayer.png";

  // player animation array
  var playerAssets = [player, animatedPlayer];

  //asteroid array

  var asteroid = [];
  asteroid[0] = {
    x : 250,
    y : 40
  };

  //keys
  document.addEventListener("keydown",moveDown);

  function moveDown(){
    pY += 2;
  }

  //player update
  function updatePlayer() {
    for (var i = 0; i < playerAssets.length; i++) {
      frames[i].src = playerAssets[i];
    }

    ctx.drawImage(frames[frame],pX,pY,54.6,52.6);
    frame += 1 % frames.length;
  };

  //function
  function draw() {
    ctx.clearRect(0,0,c.width,c.height);
    setInterval(updatePlayer, 1000/30);

    for (var i = 0; i < asteroid.length; i++) {
      ctx.drawImage(aster, asteroid[i].x, asteroid[i].y, 29.6, 29.3);
      setInterval(asteroid[i].x--, 400);

      if(asteroid[0].x == 225) {
        asteroid.push({
          x : c.width,
          y : Math.floor(Math.random())
        });

      }

    }    

    requestAnimationFrame(draw);

  }

</script>

var c=document.getElementById(“游戏”);
var ctx=c.getContext(“2d”);
//变数
pX=0;
pY=0;
帧=0;
帧=[]
//加载图像精灵
var player=新图像();
var aster=新图像();
var敌人=新图像();
var max=新图像();
var animatedPlayer=新图像();
player.src=“player.png”;
aster.src=“aster.png”;
敌方.src=“敌方.png”;
max.src=“max.png”;
animatedPlayer.src=“animatedPlayer.png”;
//播放器动画阵列
var playerasets=[player,animatedPlayer];
//小行星阵列
var小行星=[];
小行星[0]={
x:250,
y:40
};
//钥匙
文件。添加的文件列表器(“向下键”,下移);
函数moveDown(){
pY+=2;
}
//播放器更新
函数updatePlayer(){
对于(变量i=0;i
以下是我需要帮助的部分:

  //player update
  function updatePlayer() {
    for (var i = 0; i < playerAssets.length; i++) {
      frames[i].src = playerAssets[i];
    }
//播放器更新
函数updatePlayer(){
对于(变量i=0;i
好的,如果有人向我解释为什么它说它是未定义的,以及如何修复它,我将非常感激。谢谢你的帮助,我非常感谢你花时间来帮助我

谢谢,
Amiya

原因是:帧[i]中没有元素(索引为“i”的对象/数组“帧”)。
您应该在更改src之前检查该元素是否存在。

这基本上意味着索引“i”处的元素在数组中,
是未定义的。所以问题是,您是否将任何元素推入数组
?我确实看到您正在将变量初始化为空数组,但我没有看到任何
帧。问题中的push
语句。