我没有创建的变量出现在控制台 p5 中

Variable I did not make is coming up in the console p5

我已经收到此错误消息 "TypeError: a is undefined" 一段时间了,我最终将它缩小到我项目中的几行代码。我从原始项目创建了一个较小的项目来演示我的问题:

new p5();
var particle = function(X, Y, C, Kind, Fun) {
        this.pos = createVector(X, Y);
        this.vel = createVector(0, 0);
        this.accel = createVector(0, 0);
        this.col = C;
        this.isDead = false;
        this.kind = Kind;
        this.affect = Fun;
};

function setup() {
    createCanvas(window.innerWidth, window.innerHeight);
};

var particles = new Array(new particle(1, 1, color(1, 1, 1), function () {
    cosole.log("your mamma");
}));

function draw() {

};

如果我 运行 在浏览器中执行此操作,则会收到上述错误消息。如果您想知道我的 html 长什么样,它是:

<html>
<head>
    <meta charset="utf-8">
    <title>Test</title>
    <script src="p5.min.js"></script>
    <script src="p5_test.js"></script>
</head>
<style>
    body {margin: none; padding: none;}
</style>
<body></body>
</html>

有什么建议吗??

您似乎在尝试使用按需全局模式来绕过在调用 setup() 之前无法使用 P5 函数的限制。我希望您的代码能够正常工作。

然而,当我 运行 代码时,我得到这个错误:

Uncaught TypeError: Cannot read property '_colorMode' of undefined
    at new p5.Color (p5.js:6482)
    at p5.color (p5.js:6174)
    at sketch.js:17

您使用的是缩小版的库,因此变量名并不是很有用。我使用的是未缩小版本,所以我可以看到实际问题是找不到 _colorMode 变量。

跟踪代码,我们看到您的代码调用了 color() 函数,该函数命中了 P5.js 的第 6174 行:

return new p5.Color(this._renderer, arguments);

调用 p5.Color 构造函数,它命中 P5.js 的第 6482 行:

this.mode = renderer._colorMode;

从这里我们可以看出renderer变量是未定义的,当我们试图访问它的_colorMode变量时,我们得到了错误。

因此,看起来 P5 的内部 renderer 变量未定义,即使您使用的是按需全局模式。按需全局模式可让您访问像 random() 这样的简单函数,但它不会让您访问需要渲染器已初始化的函数。

要解决您的问题,只需将您的初始化移动到您的 setup() 函数中:

var particle = function(C) {
        this.col = C;
};

var particle;

function setup() {
    createCanvas(window.innerWidth, window.innerHeight);
    particle = new particle(color(1, 1, 1));
}

function draw() {

}

请注意,您也可以删除代码顶部的 new p5(),因为它对您根本没有帮助。另请注意,为了创建 MCVE,我已经简化了您的代码,但同样的想法也适用于您的主项目。