我没有创建的变量出现在控制台 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,我已经简化了您的代码,但同样的想法也适用于您的主项目。
我已经收到此错误消息 "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,我已经简化了您的代码,但同样的想法也适用于您的主项目。