p5.js: Uncaught Error: [object Arguments]is not a valid color representation
p5.js: Uncaught Error: [object Arguments]is not a valid color representation
我正在使用二维数组创建书架,并希望为每本书分配随机颜色。我的代码有效,每次刷新时随机选择 14 种十六进制颜色,并应用于 14 本书中的每一本书。
但是我想改进我的代码,所以这个错误没有出现:
p5.min.js:7 Uncaught Error: [object Arguments]is not a valid color representation.
at d.Color._parseInputs (p5.min.js:7)
at new d.Color (p5.min.js:6)
at e.d.color (p5.min.js:6)
at d.Renderer2D.fill (p5.min.js:8)
at e.d.fill (p5.min.js:7)
at draw (sketch.js:38)
at e.redraw (p5.min.js:8)
at e.<anonymous> (p5.min.js:7)
const colors = [];
var randomColor;
var colorCounter;
var bookCounter;
function setup() {
createCanvas(800, 600);
background(200);
colorCounter = 0;
bookCounter = 1;
for (var i = 0; i < 14; i++) {
const randomColor = Math.floor(Math.random() * 16777215).toString(16);
colors.push("#" + randomColor);
};
console.log(colors);
}
function draw() {
stroke(0, 0, 200);
strokeWeight(5);
noFill()
rect(45, 45, 360, 200);
rect(45, 250, 360, 205);
for (var k = 0; k < 14; k++) {
noStroke();
fill(colors[k]);
rect(50 + k * 20, 550, 20, 20);
}
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 7; j++) {
stroke(150, 0, 0);
console.log("Before: " + colorCounter);
fill(colors[colorCounter]);
colorCounter += 1;
console.log("After: " + colorCounter);
rect(50 + j * 50, 50 + i * 200, 50, 200);
}
}
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 7; j++) {
noStroke();
textSize(20);
fill(255);
text("B\no\no\nk\n \n" + bookCounter, 70 + j * 50, 80 + i * 200, 100);
bookCounter += 1;
}
}
}
<script src="https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.js"></script>
当您将无效的颜色规范(数字、字符串或 Color 对象)传递给 fill()
函数时,会发生此错误。这包括传递 undefined
.
在这种情况下引发的错误是 colorCounter
是一个全局变量的结果,它在 setup()
中仅设置为 0,而且默认情况下 draw()
函数被重复调用。您可以从控制台日志输出中看到错误发生在显示“Before: 14”之后。因此 colorCounter
的值是 14
,您尝试调用 fill(colors[colorCounter])
。由于colors
的长度为14,最后一个元素的索引为13,所以colors[colorCounter]
returns undefined.
您可以通过以下两种方式之一修复此错误:1) 在 draw()
函数中重置值 colorCounter 和 bookCounter,或 2) 在您的设置函数中调用 noLoop()
以便草图只绘制一次。
我正在使用二维数组创建书架,并希望为每本书分配随机颜色。我的代码有效,每次刷新时随机选择 14 种十六进制颜色,并应用于 14 本书中的每一本书。 但是我想改进我的代码,所以这个错误没有出现:
p5.min.js:7 Uncaught Error: [object Arguments]is not a valid color representation.
at d.Color._parseInputs (p5.min.js:7)
at new d.Color (p5.min.js:6)
at e.d.color (p5.min.js:6)
at d.Renderer2D.fill (p5.min.js:8)
at e.d.fill (p5.min.js:7)
at draw (sketch.js:38)
at e.redraw (p5.min.js:8)
at e.<anonymous> (p5.min.js:7)
const colors = [];
var randomColor;
var colorCounter;
var bookCounter;
function setup() {
createCanvas(800, 600);
background(200);
colorCounter = 0;
bookCounter = 1;
for (var i = 0; i < 14; i++) {
const randomColor = Math.floor(Math.random() * 16777215).toString(16);
colors.push("#" + randomColor);
};
console.log(colors);
}
function draw() {
stroke(0, 0, 200);
strokeWeight(5);
noFill()
rect(45, 45, 360, 200);
rect(45, 250, 360, 205);
for (var k = 0; k < 14; k++) {
noStroke();
fill(colors[k]);
rect(50 + k * 20, 550, 20, 20);
}
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 7; j++) {
stroke(150, 0, 0);
console.log("Before: " + colorCounter);
fill(colors[colorCounter]);
colorCounter += 1;
console.log("After: " + colorCounter);
rect(50 + j * 50, 50 + i * 200, 50, 200);
}
}
for (var i = 0; i < 2; i++) {
for (var j = 0; j < 7; j++) {
noStroke();
textSize(20);
fill(255);
text("B\no\no\nk\n \n" + bookCounter, 70 + j * 50, 80 + i * 200, 100);
bookCounter += 1;
}
}
}
<script src="https://cdn.jsdelivr.net/npm/p5@1.4.0/lib/p5.js"></script>
当您将无效的颜色规范(数字、字符串或 Color 对象)传递给 fill()
函数时,会发生此错误。这包括传递 undefined
.
在这种情况下引发的错误是 colorCounter
是一个全局变量的结果,它在 setup()
中仅设置为 0,而且默认情况下 draw()
函数被重复调用。您可以从控制台日志输出中看到错误发生在显示“Before: 14”之后。因此 colorCounter
的值是 14
,您尝试调用 fill(colors[colorCounter])
。由于colors
的长度为14,最后一个元素的索引为13,所以colors[colorCounter]
returns undefined.
您可以通过以下两种方式之一修复此错误:1) 在 draw()
函数中重置值 colorCounter 和 bookCounter,或 2) 在您的设置函数中调用 noLoop()
以便草图只绘制一次。