简体   繁体   English

为什么我的控制台显示“无法设置未定义的属性'src'”?

[英]Why does my console say “Cannot set property 'src' of undefined”?

So I'm trying to create a game with Canvas and I have a problem with one of the animations. 因此,我尝试使用Canvas创建游戏,但其中一个动画存在问题。 It says it can't set the src property of "undefined". 它说它不能将src属性设置为“ undefined”。 I don't see why it is undefined, so I need help with this bit. 我不明白为什么它没有定义,所以我需要这方面的帮助。 Here's my whole code: 这是我的整个代码:

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>

Here's the part that I need help with: 这是我需要帮助的部分:

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

Okay, so I would really appreciate if someone explains to me why it's saying it's undefined and how to fix it. 好的,如果有人向我解释为什么它是未定义的以及如何修复它,我将非常感激。 Thanks for your help and I really appreciate you taking your time to help me. 感谢您的帮助,非常感谢您抽出宝贵的时间来帮助我。

Thanks, Amiya 谢谢Amiya

Reason is: you don't have element in frames[i] (object/array "frames" with index "i"). 原因是:您在frame [i]中没有元素(对象/数组“ frames”的索引为“ i”)。 You should check existence of this element before changing the src. 更改src之前,应检查此元素是否存在。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM