p5.j​​s 27646:未捕获的TypeError:无法读取未定义的属性“0”

时间:2017-02-21 19:36:09

标签: javascript uncaught-typeerror p5.js

我在JavaScript,p5.js编码并遇到了这个错误行:

  

27646:未捕获的TypeError:无法读取未定义的属性“0”

我不知道这意味着什么,因为我对JavaScript不是很有经验。这对我来说也很可疑,因为我的项目在任何地方都没有第27646行。

这是我的代码:

  var particles = [];
  const word0 = 'p5.js',
    word1 = 'is nice';
  var active, inactive;
  var cooldown;
  var font;

  function preload() {
      font = loadFont('data/LucidaSansRegular.ttf');
  }

  function setup() {
      createCanvas(600, 300);
      active = font.textToPoints(word0, 50, 200, 200);
      inactive = font.textToPoints(word1, 50, 200, 200);

      cooldown = 500;

      for (var i = 0; i < active.length; i++) {
        particles.push(new Particle(active[i].x, active[i].y));
      }
  }

 function draw() {
      background(60);

      noStroke();
      fill(255);

      for (var i = 0; i < particles.length; i++) {
        if (particle[i].radius < 0) {
           particles.splice(i, 1);
           continue;
        }

        if (cooldown < 0) {
           particles[i].forceToDes();
        } else {
           particles[i].fleeFromDes();
        }

        particles[i].update();
        particles[i].show();
     }

     if (cooldown < 500 && cooldown > -500) {
       cooldown--;
     } else {
       cooldown++;
     }

     if (cooldown == -499) {
       changeText();
     }
 }

function changeText() {
     switchActive();

     if (active.length == inactive.length) {
       for (var i0 = 0; i0 < active.length; i0++) {
          particles[i0].des = createVector(active[i0].x, active[i0].y)
       }
     } else if (active.length > inactive.length) {
       for (var i1 = 0; i1 < particles.length; i1++) {
          particles[i1].des = createVector(active[i1].x, active[i1].y);
     }

       for (var i2 = 0; i2 < active.length - inactive.length; i2++) {
          var p = new Particle(active[i2].x, active[i2].y),
            r = particles.random();
          p.pos = r.pos;
          particles.push(p);
       }
    } else {
       for (var i3 = 0; i3 < inactive.length - active.length; i3++) {
         var r = floor(random(particles.length));
         particles[r].shrink();
       }

      for (var i4 = 0; i4 < particles.length; i4++) {
         particles[i4].des = createVector(active[i4].x, active[i4].y);
      }
  }
}

function switchActive() {
   var temp = active;
   active = inactive;
   inactive = temp;
}

我希望你能帮助我:) 谢谢你!

2 个答案:

答案 0 :(得分:0)

请将您的代码发布为我们可以复制并粘贴以运行的MCVE。当我尝试运行您的代码时,我收到错误,因为我没有您尝试加载的字体。包括字体文件或修改代码,因此我们不需要字体文件。

但只是看看你的代码,这对我很有用:

for (var i = 0; i < particles.length; i++) {
  if (particle[i].radius < 0) {

在这里,您循环遍历particles数组,然后使用名为particle的变量。这可能是一个简单的错字。

我也怀疑这一行:

r = particles.random();

在这里,您要设置一个尚未定义的变量。

当您的代码包含多个这样的错误时,通常意味着您没有在小块中进行测试。你应该养成孤立工作的习惯,只测试一小部分,直到你完全正常工作。如果您遇到困难,也可以更容易发布MCVE。

答案 1 :(得分:0)

您的问题是 word1 字符串中有空格。

textToPoints()不处理不可打印的字符。

尝试没有空格的字符串或将字符串拆分为字符串,然后组合点数组。