Java 球的随机起始位置,避免碰撞
我知道有一些类似的问题,但我的代码是略有不同,我觉得它几乎完成我只是需要一个轻微的调整,但我不知道到底是什么 我的目标是在900x600画布中生成圆形,而不使它们最初发生碰撞。球的数量由用户指定,最多100个 到目前为止,我的方法是:Java 球的随机起始位置,避免碰撞,java,swing,random,Java,Swing,Random,我知道有一些类似的问题,但我的代码是略有不同,我觉得它几乎完成我只是需要一个轻微的调整,但我不知道到底是什么 我的目标是在900x600画布中生成圆形,而不使它们最初发生碰撞。球的数量由用户指定,最多100个 到目前为止,我的方法是: startCounter = 8; balls = new ArrayList<>(); for (int i = 0; i < amount; i++) { diameter = random.nextInt(30) + 10 +
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);
}
startCounter=8;
balls=新的ArrayList();
对于(int i=0;i850 | | ball.getYPosition()>550)
{
继续;//避免开始冲突
}
添加(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++;
}
}
startCounter=8;
balls=新的ArrayList();
int goodBalls=0;
而(goodBalls850 | | ball.getYPosition()>550){//避免启动碰撞
添加(ball);
goodBalls++;
}
}
For循环在第一个循环之前已确定循环的数量。更好的方法是将(int i=0;i替换为'while i
代码应该是这样的
`startCounter=8;
balls=新的ArrayList()
while(i850 | | | ball.getYPosition()>550){//避免开始碰撞
继续;
}
添加(ball);
i+=1;
}
`我设法解决了这个问题,谢谢大家的帮助:)
startCounter=8;
balls=新的ArrayList();
while(balls.size()
850 | | ball.getYPosition()>550){
继续;
}
添加(ball);
i++;
}
之所以发生这种情况,是因为我(索引)仍在增加,要么增加数量,要么将其更改为while loop(最好更改)。问题中的格式不好不能成为您答案格式不好的借口。@EdTaylor我已更正了初始设置,如果有帮助,您能接受答案吗?这种方法会导致严重错误,球现在卡住了:S
while (i < 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
continue;
}
balls.add(ball);
i+=1;
}
startCounter = 8;
balls = new ArrayList<>();
while (balls.size()<amount){
int i = 0;
diameter = random.nextInt(30) + 10 +
diameterRange;//generate diameter value for ball
startCounter = random.nextInt(800) + 100;
startCounterY = random.nextInt(400) +100;
BouncingBall ball = makeBall(startCounter,
startCounterY, diameter, i);
if (Physics.Collision(ball, balls)||ball.getXPosition()>
850||ball.getYPosition()>550){
continue;
}
balls.add(ball);
i++;
}