LibGDX-给定一个移动圆的数组列表,如何检查它们之间的碰撞?
所以我有3门课,MyGdxGame,Ball和DetectCollision。MyGdxGame初始化4个球的实例(不同的颜色和速度/方向,都从屏幕两侧反弹),并将它们存储为arraylist 此arraylist通过DetectCollision的构造函数传递: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) {
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++;
}