p5.js搭配p5.play.js报Cannot read properties of undefined (reading 'touches')如何修复
Uncaught TypeError: Cannot read properties of undefined (reading 'touches') at p5._main.default._updateTouchCoords (p5.js:78864) at p5._updateNextTouchCoords (p5.play.js:265) at p5._onmousedown (p5.play.js:302)
报错原因
这是p5.play v2.x版本与p5.js v1.5.0及以上版本的兼容性问题:p5.js从v1.5.0开始重构了内部模块导出逻辑,移除了_main这个内部属性,而p5.play v2在处理触摸、鼠标事件时会硬编码调用p5._main.default._updateTouchCoords方法,找不到对应属性就会抛出该错误。
修复方案
- 方案1:降级p5.js版本
将p5.js版本回退到v1.4.1,这是p5.play v2官方适配的最后一个p5.js版本,无需修改其他代码即可解决报错。 - 方案2:手动打兼容性补丁
保留现有p5.js版本的前提下,在引入p5.js之后、引入p5.play.js之前插入如下代码:
手动补全p5.play依赖的内部属性即可正常运行。p5.prototype._main = { default: p5 }; - 方案3:升级p5.play到v3.x版本
p5.play v3已经完全重构了事件处理逻辑,修复了和新版p5.js的兼容问题,直接升级到v3即可解决该报错。
注意:无论使用哪种方案,都需要保证库的引入顺序为:先加载p5.js,再加载p5.play.js,顺序错误也会触发同类依赖报错。
内容的提问来源于stack exchange,提问作者Andy-THE-Coder
相关产品推荐
相关产品推荐

