Object p5.js实例模式:无法读取属性';0';未定义的

Object p5.js实例模式:无法读取属性';0';未定义的,object,push,processing,instance,p5.js,Object,Push,Processing,Instance,P5.js,我有一个全局模式下的草图,它工作得非常完美,现在我将它带到另一个实例模式下的文档中,因为它与3D/WEBGL草图并排放置 每当单击推送Pulse()的新实例时,draw()中的for()循环返回“无法读取未定义的属性“0”。正如我所说的,它在全局模式下工作得很好,所以这里的语法肯定是错误的,但我找不到任何在p5实例模式下使用对象的示例。我不知道为什么它不能读取数组,或者为什么它不能推 在p5.js实例模式下推送到对象数组时,我非常不确定语法。我还尝试了s.Pulse.push(新的s.Pulse

我有一个全局模式下的草图,它工作得非常完美,现在我将它带到另一个实例模式下的文档中,因为它与3D/WEBGL草图并排放置

每当单击推送Pulse()的新实例时,draw()中的for()循环返回“无法读取未定义的属性“0”。正如我所说的,它在全局模式下工作得很好,所以这里的语法肯定是错误的,但我找不到任何在p5实例模式下使用对象的示例。我不知道为什么它不能读取数组,或者为什么它不能推

在p5.js实例模式下推送到对象数组时,我非常不确定语法。我还尝试了s.Pulse.push(新的s.Pulse())和s.Pulse.s.push(新的s.Pulse())的变体,但这些都返回了推送错误。下面的代码似乎正在推送,但数组无法读取

任何帮助都会很好,谢谢

var twoDee=函数{
var-cnv;
var cnvWidth,cnvHight;
脉冲量;
var脉冲=[];
s、 设置=函数(){
s、 cnvWidth=s.窗宽;
s、 cnvHeight=document.getElementById('sketch-wrap-bleed-bottom')。离视;
s、 cnv=s.createCanvas(s.cnvWidth、s.cnvHeight、s.P2D);
s、 cnv.母公司(“草图包裹引气底部”);
s、 脉冲量=0;
}
s、 draw=函数(){
s、 背景(40);
对于(var i=0;i

}

对于来自P5.js的内容,只需使用
s
变量,如
mouseX
setup()
函数

对于您要声明的内容,例如
脉冲
脉冲量
变量,您不使用
s
变量。因此,您的
for
循环应该如下所示:

for (var i = 0; i < pulsesAmount; i++) {
    pulses[i].move();
    pulses[i].display();
}
请咨询以更好地了解
push()
函数的功能。它与数组无关

您可能正在考虑使用
append()
函数,但即使这样,您的语法也已关闭。您必须将数组连同要添加的值一起传递到函数中。像这样:

s.append(pulses, new Pulse());

修复后,您仍然会遇到一些其他问题(例如不使用
s
变量来访问
map()
函数),但这会让您朝着正确的方向前进。

您可以链接到代码的JSFIDLE或codepen吗?我们无法运行您的代码,因为它无法找到
sketch wrap-bleed-bottom'
元素,因此引发了一个错误。谢谢Kevin。我制作了一个codepen版本,但是控制台没有打印出错误代码。不管怎么说,我在鼠标上添加了一个椭圆,当你点击它时,它会立即切断,以证明当你尝试推一个objectSafari时草图会断开。Safari将错误表述为“TypeError:undefined不是一个对象(评估'I')”,非常感谢!我已经检查并试图根据这个修改语法,但仍然会出现错误。这里有什么东西我处理得不正确吗?@themessup请查看我编辑的答案。堆栈溢出并不是为来回的问题而设计的,所以如果您有后续问题,请将其作为新问题发布在自己的帖子中,我们将从那里开始。
s.append(pulses, new Pulse());