JavaScript流体模拟教程中Float32Array未显式赋值却有值?
问题解答
new Float32Array(length) 创建的数组确实默认所有元素为0,你看到的3、4等非0值,说明代码里一定存在你没找到的写入操作,结合你研究的流体模拟代码,大概率是以下情况:
- 写入操作分散在网格状态处理函数中:这类流体模拟里,
this.s通常用来标记单元格类型(比如固体、流体、空单元格),赋值逻辑一般藏在标记单元格的循环里——比如标记固体单元格时会写this.s[cellIdx] = 3,标记流体单元格时写this.s[cellIdx] = 4。你可以全局搜索代码里的this.s[来定位所有写入点,大概率能在markSolidCells、updateGrid这类和网格初始化/更新相关的函数里找到。 - 断点追踪验证:如果还是找不到,在
this.s = new Float32Array(this.fNumCells)这行加个断点,然后逐步运行代码,观察第一次修改this.s元素的调用栈,就能直接定位到写入的源头。
补充:JavaScript的TypedArray不存在“自动赋值”的机制,所有非默认值必然来自显式的代码写入。
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

