这是程序中不能正常运行的部分。该程序应该生成一堆圆圈,并让它们在周围移动并从侧面反弹。当它从左边的大小反弹时,边(R)应该减小。当它从右侧反弹时,它应该会增加。当它击中左侧时,它工作得很好,但当它击中右侧时,它就会变得非常大,非常快,然后漂浮而不反弹。你能帮我解决这个问题吗?谢谢
public void myMove() {
x+=dx;
if(x<=0) {
x-=dx;
dx*=-1;
r = (int)(r*1.1);
}
if(x>=500-(r*2)) {
x-=dx;
dx*=-1;
r = (int)(r*0.7);
}
y+=dy;
if(y<=0) {
y-=dy;
dy*=-1;
dy = (int)(dy*1.5);
dx = (int)(dx*1.5);
}
if(y>=500-(r*2)) {
y-=dy;
dy*=-1;
dy = (int)(dy*0.7);
dx = (int)(dx*0.7);
}
}发布于 2021-03-17 10:52:26
它看起来是这样的,当你的程序检查它是否撞到了正确的墙,它发现了一个碰撞,它再次更新了你的球的位置,然后改变了侧面的大小(r)。当它在下一次迭代中再次检查时,它仍然注册它正在冲突,因为大小已经改变,但是圆的位置没有改变到足以停止注册冲突。试着将你的速度更新dx*=-1移到你的移动d-=dx的上方,并且首先改变墙的大小。下面是我的代码:
if(x>=500-(r*2)) {
r = (int)(r*0.7);
dx*=-1;
d-=dx;
}这应该是有效的,但是如果它不起作用,请让我更明确地知道r变量是什么。无论哪种方式,更新后的代码都应该没问题,但我可能假设变量是错误的。
https://stackoverflow.com/questions/66666133
复制相似问题