LibGDX-给定一个移动圆的数组列表,如何检查它们之间的碰撞?

LibGDX-给定一个移动圆的数组列表,如何检查它们之间的碰撞?,libgdx,sprite,collision,geometry,detection,Libgdx,Sprite,Collision,Geometry,Detection,所以我有3门课,MyGdxGame,Ball和DetectCollision。MyGdxGame初始化4个球的实例(不同的颜色和速度/方向,都从屏幕两侧反弹),并将它们存储为arraylist 此arraylist通过DetectCollision的构造函数传递: public class DetectCollisions { ArrayList<Ball> ball; public DetectCollisions(ArrayList<Ball> ball) {

所以我有3门课,MyGdxGame,Ball和DetectCollision。MyGdxGame初始化4个球的实例(不同的颜色和速度/方向,都从屏幕两侧反弹),并将它们存储为arraylist

此arraylist通过DetectCollision的构造函数传递:

public class DetectCollisions {
ArrayList<Ball> ball;

public DetectCollisions(ArrayList<Ball> ball) {
    this.ball = ball;
    start();
}
public void start() {
for(int i=0; i<ball.size();i++) {
    ...
}
}
公共类检测冲突{
ArrayList球;
公共检测冲突(ArrayList ball){
这个球=球;
start();
}
公开作废开始(){

对于(int i=0;i如果要向arraylist添加大量对象,请使用2D物理引擎为您完成所有工作。如果要继续实现自己的函数,最基本的方法是在列表上实现嵌套循环,以检查arraylist中的每个可能对。复杂性为O(n^2)


for(int i=0;i如果让每个
Ball
都有
Circle
类型的边界,这很容易实现

您可以按如下方式创建一个圆:
circle ballBounds=新圆(float x,float y,float radius)
此圆可以作为每个球的边界,最终允许您使用
Intersector
类检查它们是否碰撞

有了每个
的边界,我们可以轻松地在
阵列列表中循环,并检查碰撞的数量。例如:

ArrayList<Ball> ball = new ArrayList<Ball>(); // You need to add Balls to this ArrayList

Intersector intersector = new Intersector();

int counter = 0;

for(int i = 0; i < ball.size()-2; i++){
   if(intersecor.overlaps(ball.get(i), ball.get(i+1)){
       counter++;
   }
   i++;
}
ArrayList ball=new ArrayList();//您需要将球添加到此ArrayList
Intersector Intersector=新的Intersector();
int计数器=0;
对于(int i=0;i
ArrayList<Ball> ball = new ArrayList<Ball>(); // You need to add Balls to this ArrayList

Intersector intersector = new Intersector();

int counter = 0;

for(int i = 0; i < ball.size()-2; i++){
   if(intersecor.overlaps(ball.get(i), ball.get(i+1)){
       counter++;
   }
   i++;
}