我有一个程序,我可以创建反弹的球。当两个球碰撞时,两个球应分成两个较小的球,开始向不同的方向移动。
这就是我处理碰撞的方法
public boolean intersects (Ball b) {
double distance = Math.sqrt(Math.pow((this.x - b.x), 2) + Math.pow((this.y - b.y), 2));
if (this.size / 2 + b.size / 2 >= distance && !(this.equals(b))) {
return true;
} else return false;
我正在寻找一个想法,这将有助于决定在哪里放置较小的球,以便它们不会立即再次发生碰撞。我尝试了不同的动作,但它们最终都太靠近了,所以它们都开始分裂弹跳而变得混乱。
这是Ball类
public Ball(double x, double y, double size, double dx, double dy) {
this.x = x;
this.y = y;
this.size = size;
this.dx = dx;
this.dy = dy;
要移动球,我会执行以下操作
b.x = b.x + b.dx;
b.y = b.y + b.dy;
在球碰撞的那一刻,我有两个球对象。我知道他们中心的坐标:x
,y
,速度dx
,它们沿着x轴移动,速度dy
沿着y轴
我省略了处理视图的代码,因为我基本上需要一个解决方案,如何为4个球更改dx
,dy
,x
和y
,所以他们都彼此远离,不要立即碰撞。
我真的不需要代码解决方案,而是一般的想法。
答案 0 :(得分:0)
我想你可能有两个问题。首先,你的四个“新”球都是在碰撞点或附近开始的,你的碰撞探测器可能会立即将它们视为碰撞。要解决这个问题,您可以将“新”球标记为无法相互碰撞一个或两个碰撞探测器。我需要查看代码以提供更好的解决方案。
其次,你可能想要随机化四个“新”球的结果向量。只需为每个设置随机设置dx和dy,这应该足够好了。