"TypeError: c1.levels is undefined" when drawing triangles in p5.js

"TypeError: c1.levels is undefined" when drawing triangles in p5.js

我一直在尝试在 p5.js 中重新创建一个在屏幕上绘制三角形的程序,就像这样:

它基于 Mike Brondbjerg 在 codepen.io 上的 code I found,但我在阅读它的过程中做了一些更改。当我第一次尝试 运行 直接从他的项目代码在我自己的电脑上时,它根本不起作用,所以我花了一个上午的时间将它编辑成这个新版本,如下所示。

var img;
var xPos = [];
var yPos = [];
var sampleRate = 8; 
var shapePoints = 3; 

var frames = 0;

function preload() {
    img = loadImage("zebra.png");
}

function setup() {
    createCanvas(800, 600);
    smooth();
    noStroke();
    background(0);
}

function draw() {

    frames = frames + 1;

    if (frames >= sampleRate) {

        frames = 0;

        xPos.push(mouseX);
        yPos.push(mouseY);

        if (xPos.length >= shapePoints) {
            var pixelA = img.get(xPos[xPos.length-1], yPos[yPos.length-1]);
            var pixelB = img.get(xPos[xPos.length-2], yPos[yPos.length-2]);
            var inbetweenCol = lerpColor(pixelA, pixelB, .5);
            fill(inbetweenCol);

        beginShape();
            for(var v=0; v<shapePoints; v++)
            {
                var arrayPos = xPos.length-1 - v;
                vertex(xPos[arrayPos],yPos[arrayPos]);
              }
        endShape(CLOSE);

        }
    }
}

但是,当我在我的浏览器中尝试 运行 它时,它给了我一个我以前从未见过的错误。

我的搜索引擎中也没有太多内容。

文件在我的目录中是这样组织的:

directory_name 
 |__ lib
 |     |__ p5.js
 |___ index.html
 |___ sketch.js
 |___ zebra.png

并且 html 文件除了基本的样板代码外大部分是空的。我这样引用 javascript 文件:

<script language="javascript" type="text/javascript" src="/lib/p5.js"></script>
<script language="javascript" type="text/javascript" src="sketch.js"></script>

有人知道是什么导致了我这个错误吗?

在您的 JavaScript 控制台中,在错误的右侧,看到显示 p5.js:6242:5 的部分了吗?点击它。

这会将您带到 p5.js 代码中导致错误的位置,然后它会告诉您代码中的什么导致了错误。

您会发现您的问题出在 lerpColor() 函数中:它告诉您它期望第一个参数中有一个 levels 字段,但该字段丢失了。

也就是说,你的问题出在这里:

var pixelA = img.get(xPos[xPos.length-1], yPos[yPos.length-1]);
var pixelB = img.get(xPos[xPos.length-2], yPos[yPos.length-2]);
var inbetweenCol = lerpColor(pixelA, pixelB, .5);

img.get() 函数 returns 一个包含 R、G、B 和 A 值的数组。 lerpColor() 函数不适用于数组。它仅适用于 Color 类型。

您需要使用 color() 函数将数组转换为 Color 类型。然后将那些 Color 类型传递给 lerpColor() 函数:

var pixelA = img.get(xPos[xPos.length-1], yPos[yPos.length-1]);
var pixelB = img.get(xPos[xPos.length-2], yPos[yPos.length-2]);
var colorA = color(pixelA[0], pixelA[1], pixelA[2]);
var colorB = color(pixelB[0], pixelB[1], pixelB[2]);
var inbetweenCol = lerpColor(colorA, pixelB, .5);

您的错误发生是因为 lerpColor() 函数正在尝试使用 levels 变量,该变量是在 Color 类型中定义的。但是由于您传递给它的是数组而不是 Color,因此 levels 变量未定义。