You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 22:06:02