我想在乒乓球游戏中进行非常简单的碰撞检测。 球是方形,桨(球棒)是矩形。
我有两个实体进入,我可以获得当前的X和Y位置,以及位图的高度和宽度。这是最简单的方法吗?
我有这段代码:
public void getCollision(Entity enitityOne, Entity enitityTwo){
double eventCoordX = (enitityOne.getCenterX() - (enitityTwo.getBitmapWidth() / 2));
double eventCoordY = (enitityOne.getCenterY() - (enitityTwo.getBitmapHeight() / 2));
double X = Math.abs(enitityTwo.getxPos() - eventCoordX);
double Y = Math.abs(enitityTwo.getyPos() - eventCoordY);
if(X <= (enitityTwo.getBitmapWidth()) && Y <= (enitityTwo.getBitmapHeight())){
enitityOne.collision();
enitityTwo.collision();
}
}
但我很瞎,这只适用于桨的中间而不是侧面。 问题是我无法看到代码错误的地方。 任何人? 有人有更好的主意吗?
答案 0 :(得分:4)
如果你想要的是找到2个给定的矩形是否以某种方式相交(并因此发生碰撞),这里是最简单的检查(C代码;随意使用浮点值):
int RectsIntersect(int AMinX, int AMinY, int AMaxX, int AMaxY,
int BMinX, int BMinY, int BMaxX, int BMaxY)
{
assert(AMinX < AMaxX);
assert(AMinY < AMaxY);
assert(BMinX < BMaxX);
assert(BMinY < BMaxY);
if ((AMaxX < BMinX) || // A is to the left of B
(BMaxX < AMinX) || // B is to the left of A
(AMaxY < BMinY) || // A is above B
(BMaxY < AMinY)) // B is above A
{
return 0; // A and B don't intersect
}
return 1; // A and B intersect
}
矩形A和B由其角的最小和最大X和Y坐标定义。
嗯...... This has been asked before。
答案 1 :(得分:0)
如果您正在处理矩形,那么
/**
* Check if two rectangles collide
* x_1, y_1, width_1, and height_1 define the boundaries of the first rectangle
* x_2, y_2, width_2, and height_2 define the boundaries of the second rectangle
*/
boolean rectangle_collision(float x_1, float y_1, float width_1, float height_1, float x_2, float y_2, float width_2, float height_2)
{
return !(x_1 > x_2+width_2 || x_1+width_1 < x_2 || y_1 > y_2+height_2 || y_1+height_1 < y_2);
}
这是一个很好的例子......