Java 球碰撞检测-半径计算-接近完成
你好:)我完全迷路了。我有两个球在屏幕上浮动。我还有一个方法可以检查是否存在冲突,以及是否存在冲突的方法名“collide:) 当两个球彼此成直线运动时,碰撞良好。问题如图所示: 因此,这些方法是:Java 球碰撞检测-半径计算-接近完成,java,android,collision,Java,Android,Collision,你好:)我完全迷路了。我有两个球在屏幕上浮动。我还有一个方法可以检查是否存在冲突,以及是否存在冲突的方法名“collide:) 当两个球彼此成直线运动时,碰撞良好。问题如图所示: 因此,这些方法是: public final float ball_radius = 2.4f; // ball image has 48 width public boolean isColliding(Ball ball) { distance = Math.sqrt((ball.image_center
public final float ball_radius = 2.4f; // ball image has 48 width
public boolean isColliding(Ball ball)
{
distance = Math.sqrt((ball.image_center_x - this.image_center_x)*(ball.image_center_x - this.image_center_x)+(ball.image_center_y - this.image_center_y)*(ball.image_center_y - this.image_center_y));
if(distance <= 2*ball_radius)
return true;
/*
float sumRadius = 9.6f;
float sqrRadius = sumRadius * sumRadius;
float distSqr = (xd * xd) + (yd * yd);
if (distSqr <= sqrRadius)
{
return true;
}*/
return false;
}
void Collide(Ball ball1, Ball ball2)
{
double dx = (ball1.x - ball2.x) + dt * (ball1.vx - ball2.vx);
double dy = (ball1.y - ball2.y) + dt * (ball1.vy - ball2.vy);
// if collision swap velocities
if (Math.sqrt(dx * dx + dy * dy) <= 2*ball_radius) {
double tempx = ball1.vx;
double tempy = ball1.vy;
ball1.vx = ball2.vx;
ball1.vy = ball2.vy;
ball2.vx = tempx;
ball2.vy = tempy;
}
}
private void moveBalls(){
for (int i = 0; i < balls.size(); i++) {
Ball ball1 = balls.get(i);
for (int a = i + 1; a < balls.size(); a++) {
Ball ball2 = balls.get(a);
if(ball1.isColliding(ball2)) {
ball1.Collide(ball1, ball2);
checkHealthAndChangeColor(ball1, ball2);
}
//catchMP.start();
}
}
for (int i = 0; i < balls.size(); i++) {
balls.get(i).step();
}
}
public final float ball_半径=2.4f;//球图像有48个宽度
公共布尔isColliding(Ball-Ball)
{
距离=Math.sqrt((ball.image\u center\u x-this.image\u center\u x)*(ball.image\u center\u x-this.image\u center\u x)+(ball.image\u center\u y-this.image\u center\u y)*(ball.image\u center\u y-this.image\u center\u y));
如果(distance@FrankN.Stein,但当我有一个48/48的球的图片时,这意味着球的半径=24。当我们得到第一个球中心点和第二个中心点之间的距离,并检查差异时,它应该起作用。我认为聚集碰撞表面,使用碰撞角度或法线在该表面上反射球只是为了澄清-你说球的图像宽度是48,但你把半径设置为2.4f
。它不应该是24f
?IsColliding
看起来是正确的,我认为问题在于方法Collide
,如果它们“现在”碰撞,你为什么要考虑“下一个”球的位置(你已经检查过了)?肉桂:屏幕就像100f/100f——老实说,我不明白它是怎么工作的:D。我刚刚检查过,如果我把一个球放在(50f,97.6f)上,它是否放在中间底部(它接触到屏幕边缘)——这就是为什么它有4.8f。是的,你说得对:)@huseyintugrulbuyukisik碰撞有效-碰撞发生后,球在正确的方向上漂浮,但检查不起作用。AndreaGhidini刚刚进行了第二次检查-现在删除了它,但没有任何改变。它们仍然重叠。