您好我正在使用this example,以便在框架内弹出多个球(大小相同)。
问题是我需要改变它,以便在2个球碰撞后它们会反弹回随机方向而不一定是物理学"办法。在任何时候,球都不能相互重叠。
很想听听有关如何在碰撞后创建随机动作的一些建议。
修改
忘记提及,球应始终保持相同的速度,因为在我的情况下所有的球具有相同的半径,它们也在相同的速度。因此,简单地增加或减少vx和vy就不会这样做。
编辑2
在我看来,根据我制作的一些逻辑,球场应该是一个与球接触点成180度范围内的随机角度。 问题是我不知道如何进行这些计算,得到每个球接触点并从那里取出范围
答案 0 :(得分:2)
一种解决方案,就是改变碰撞后的动作角度
if ( CheckCollision(ball1, ball2) ) {
//change the angle of both the balls
console.log(ball1.aoa, ball2.aoa, "old");
var a1 = Math.floor((Math.random() * 10) + 1);//change the angle using random
ball1.aoa = Math.PI / a1;
var a2 = Math.floor((Math.random() * 10) + 1);//change the angle using random
ball2.aoa = Math.PI / a2;
console.log(ball1.aoa, ball2.aoa, "new");
工作代码here
答案 1 :(得分:2)
if ( CheckCollision(ball1, ball2) ) {
在设置之前,代码执行计算以确定ball1和ball2的新速度:
//set velocities for both balls
ball1.vx = vx1;
ball1.vy = vy1;
ball2.vx = vx2;
ball2.vy = vy2;
如果您不希望它们变得真实,那么您只需将vx1,vy1和vx2以及vy2更改为随机值即可。您可能必须保留此代码
//ensure one ball is not inside others. distant apart till not colliding
while (CheckCollision(ball1, ball2)) {
ball1.posX += ball1.vx;
ball1.posY += ball1.vy;
ball2.posX += ball2.vx;
ball2.posY += ball2.vy;
}
确保您不会将球拉到彼此内部。然而,这可能意味着球将会#"相"通过一个随机方式