在JavaScript游戏循环中调用随机事件的写法是否为最佳实践?
游戏循环随机生成云朵的代码修正
原代码存在的问题:
- Math.random 调用错误:
Math.random是函数,必须通过Math.random()调用才能生成0到1之间的随机浮点数。原代码里Math.random*100是将函数对象与100相乘,结果是NaN,永远不会等于0,导致createCloud()永远不会被触发。 - requestAnimationFrame 用法错误:
- API名称拼写错误:正确的浏览器API是
requestAnimationFrame,不是requestGameAnimation; - 调用方式错误:需要将游戏循环函数的引用传递给
requestAnimationFrame,而不是直接调用函数。原写法window.requestGameAnimation.gameloop()完全不符合API规范,会导致循环中断。
- API名称拼写错误:正确的浏览器API是
修正后的代码:
function gameloop(){ let r = Math.floor(Math.random() * 100); if(r == 0) createCloud(); render(); window.requestAnimationFrame(gameloop); }
额外优化建议:
如果想更直观地控制云朵生成概率,可以直接用随机数与概率值比较,比如要实现1%的生成概率,写成if(Math.random() < 0.01),这样不需要取整,代码更简洁易懂。
内容的提问来源于stack exchange,提问作者Austin Kolongowski
相关产品推荐
相关产品推荐

