我有一个小型图书馆,我想用它来创建游戏。首先,我试图实现像素完美的碰撞检测,但是这样做并不顺利,所以我决定使用简单的边界框碰撞检测。它可以正常工作,但是在物体数量超过20个左右后,它开始放慢速度。这里是我的代码: (以循环方式运行,每秒25次)BorderBox类的使用边界框慢速碰撞检测
for (int i=0;i<sc.collGr.size();i++){
CollisionGroup gr=sc.collGr.get(i);
Collidable[] cc=gr.getCollidables();
for (int l=0;l<cc.length;l++){
for (int w=l+1;w<cc.length;w++){
if (BorderBox.areColliding(cc[l].getBorderBox(), cc[w].getBorderBox()){
addEventToHandler(sc.collGr.get(i),cc[l],cc[w]);
}
}
}
}
部分:
public class BorderBox {
int top;
int down;
int left;
int right;
/**
* Creates new BorderBox object
* Arguments: (top, down, left, right);
* */
public BorderBox(int topy,int downy, int leftx,int rightx){
top=topy;
down=downy;
left=leftx;
right=rightx;
}
/**
* Checks if two provided BorderBoxes are colliding.
* */
public static boolean areColliding(BorderBox a,BorderBox b){
if (b.left<=a.right && b.right>=a.left && b.down>=a.top && b.top<=a.down){
return true;
}
return false;
}
而不是检查每一个对,试图建立一个“智能”系统,粗制滥造(无假阴性)估计,当两个物体发生碰撞将防止检查两个对象都远不及对方。你可以使用边界圆来完全防弹。 – Blender 2012-04-07 16:10:38