我在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;
}
我希望你能帮助我:) 谢谢你!
答案 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()不处理不可打印的字符。
尝试没有空格的字符串或将字符串拆分为字符串,然后组合点数组。