我的p5.js生命游戏无法正常运行,求故障原因分析
生命游戏p5.js程序故障分析
问题现象
程序初始生成随机黑白方块作为初始状态,仅运行一帧后所有白色存活方块全部消失,之后画面不再变化,控制台无报错信息。
故障原因
核心问题是赋值运算符使用错误:在更新下一代网格next时,错误使用了比较运算符==而非赋值运算符=,导致next数组未被正确赋值。
具体错误出现在draw函数的状态更新逻辑中:
- 判断死细胞复活时,代码写为
next[i][j] == 1(这是比较操作,无实际赋值效果) - 判断活细胞死亡时,代码写为
next[i][j] == 0(同样是比较操作,无实际赋值效果)
由于make2D函数创建的二维数组元素默认是undefined,未被正确赋值的next数组所有元素保持undefined。当grid = next执行后,后续帧中所有细胞状态都是undefined,渲染时会被判定为假值,显示为黑色,表现为所有存活细胞消失且画面不再变化。
修正方案
将状态更新逻辑中的两个比较运算符==改为赋值运算符=:
修正后的draw函数状态更新部分代码:
//processing let next = make2D(col, row); for (let i = 0; i < col; i++) { for (let j = 0; j < row; j++) { let nb = calculatePosition(grid, i, j); if (grid[i][j] == 0 && nb == 3) { next[i][j] = 1; // 替换==为= } else if (grid[i][j] == 1 && (nb > 3 || nb < 2)) { next[i][j] = 0; // 替换==为= } else { next[i][j] = grid[i][j]; } } } grid = next;
额外优化建议
- 移除
calculatePosition函数中的console.log(sum),避免每帧输出大量日志占用性能 - 将
frameRate(1)移至setup函数中,无需每帧重复设置
内容的提问来源于stack exchange,提问作者hirbry
相关产品推荐
相关产品推荐

