我知道存在一些与此问题类似的问题,但是我的代码略有不同,我觉得它快要完成了,我只需要稍作调整,但是我不确定到底是什么。

我的目标是在900x600画布上生成圆圈,而不会使其最初发生碰撞。球的数量由用户指定,最多100个。

到目前为止,我的方法:

startCounter = 8;

balls = new ArrayList<>();

for (int i = 0; i < amount; i++) {
    diameter = random.nextInt(30) + 10 + diameterRange; //generate diameter value for ball
    startCounter += diameter + 25; //stop balls from spawning on top of each other

    BouncingBall ball = makeBall(startCounter, diameter, i);
    if (Physics.Collision(ball, balls)
      || ball.getXPosition() > 850 || ball.getYPosition() > 550)
    {
        continue; //avoid starting collisions
    }

    balls.add(ball);
}


当前,这几乎可以完美地工作,除了如果if语句失败,它不会创建球,导致球的数量少于用户指定的数量。

我试图加我-;到if语句的内容,但这是行不通的,在这种情况下,球似乎产生不正确。

谢谢:)

最佳答案

将其更改为while循环,即:

startCounter = 8;
balls = new ArrayList<>();
int goodBalls=0;
while (goodBalls<amount){
  diameter = random.nextInt(30) + 10 + diameterRange;//generate diameter value for ball
  startCounter += diameter + 25;//stop balls from spawning on top of eachother
  BouncingBall ball = makeBall(startCounter, diameter, i);
  if !(Physics.Collision(ball, balls)||ball.getXPosition()>850||ball.getYPosition()>550){//avoid starting collisions
    balls.add(ball);
    goodBalls++;
  }
}

关于java - 球的随机起始位置,避免碰撞,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46091684/

10-13 01:19