如何在p5.js中为数组元素赋值?代码语法报错求助
问题:p5.js实现鼠标按下记录位置、松开后矩形保持位置的语法错误
我正在学习p5.js,想要实现鼠标按下时记录鼠标位置,松开后矩形保持在该位置的功能。以下是我的代码:
var icons = [0] var iconsx = [10] var iconsy = [10] var jog = 0 var iconxbuffer var iconybuffer function setup() { createCanvas(650, 500); } function draw() { background(255,199,248); fill(255,248,184); rect(175, 435, 300, 55, 45); fill(255,38,241) if (mouseIsPressed === true){ rect(winMouseX, winMouseY, 45, 55) let iconsx[0] = winMouseX } else { let iconxbuffer = iconsx[0]; let iconybuffer = iconsy[0] rect(iconxbuffer, iconybuffer, 45, 55) } console.log(iconsx) }
我在第23行尝试将winMouseX赋值给iconsx[0]时,出现如下语法错误:
🌸 p5.js says:
Syntax Error - Symbol present at a place that wasn't expected.
Usually this is due to a typo. Check the line number in the error for anything missing/extra.
我理解逻辑是记录鼠标按下时的最后位置,松开后矩形显示在该位置,但因不熟悉JavaScript语法导致报错。此前读取iconsx[0]时也曾遇类似错误,通过创建缓冲变量iconxbuffer、iconybuffer读取解决,但此次是赋值操作,该方法不适用;尝试去掉方括号也无法改变变量值,现求助正确的赋值语法。
解决方案
错误原因
第23行的let iconsx[0] = winMouseX是错误语法:let是用来声明新变量的,而iconsx已经是全局声明好的数组,直接对数组元素赋值不需要加let。
修正后的基础代码
var iconsx = [10]; var iconsy = [10]; function setup() { createCanvas(650, 500); } function draw() { background(255, 199, 248); // 绘制底部固定矩形 fill(255, 248, 184); rect(175, 435, 300, 55, 45); // 绘制可移动矩形 fill(255, 38, 241); if (mouseIsPressed) { // 按下时实时更新位置并绘制 iconsx[0] = winMouseX; iconsy[0] = winMouseY; rect(iconsx[0], iconsy[0], 45, 55); } else { // 松开时绘制最后记录的位置 rect(iconsx[0], iconsy[0], 45, 55); } }
额外优化建议
- 不需要
iconxbuffer、iconybuffer这类缓冲变量,直接使用数组元素iconsx[0]和iconsy[0]即可,代码更简洁。 - 改用p5.js的
mousePressed()事件函数,只在鼠标按下时更新一次位置,避免draw()循环中重复赋值,性能更优:
var iconsx = [10]; var iconsy = [10]; function setup() { createCanvas(650, 500); } function draw() { background(255, 199, 248); fill(255, 248, 184); rect(175, 435, 300, 55, 45); fill(255, 38, 241); rect(iconsx[0], iconsy[0], 45, 55); } // 仅在鼠标按下时更新位置 function mousePressed() { iconsx[0] = winMouseX; iconsy[0] = winMouseY; }
内容的提问来源于stack exchange,提问作者3dsminerguy
相关产品推荐
相关产品推荐

