如何在JavaScript中为对象生成不同的Spawn Points(生成点)?
问题原因
你代码的核心错误有三处:
- 条件判断误用赋值运算符:
if(i=0 || 4 || 8...)里的=是赋值操作,不是相等比较,执行时会直接把i的值覆盖为0 - 多条件逻辑写法错误:
i=0 || 4 || 8的逻辑在JS中会永远返回真值(非0数字都是真值),所以所有调用都会进入if的第一个分支,永远返回同一组坐标 getSpawnY函数的else分支误用width计算Y轴坐标,应该用height
修正方案
你要实现4个生成点的需求,可以直接用取模运算简化逻辑,不需要写一长串枚举值,修正后代码如下:
// 4个生成点坐标预定义,逻辑更清晰 const spawnPoints = [ {x: width/4, y: height/4}, {x: width/2, y: height/4}, {x: width/4, y: height*3/4}, {x: width/2, y: height*3/4} ] for (let i = 0; i < numParticles; i++) { // 按i模4的结果轮流取4个生成点 const point = spawnPoints[i % 4] p[i] = particle.create( point.x, point.y, Math.random() * 45 + 45, Math.random() * 45 + 45, Math.random() * 15 * randomSign(), Math.random() * 15 * randomSign() ) }
如果要保留你原来的函数写法,修正后的判断逻辑参考:
function getSpawnX(i){ // 正确的多值匹配写法 if([0,4,8,12,16,20,24,28].includes(i)){ return width/4 }else{ return width/2 } } function getSpawnY(i){ // 用取模匹配4的倍数,简化枚举写法 if(i % 4 === 0){ return height/4 }else{ return height*(3/4) } }
内容的提问来源于stack exchange,提问作者Antoniosant
相关产品推荐
相关产品推荐

