说明
我有一个现在差不多完成的项目,但我注意到碰撞并没有真正起作用。这是一个类似蛇的游戏,可以通过触摸屏进行控制,因此可以实现尖锐的(?,对不起的德语)角度。目前我只是留下一点宽容(忽略前2个精灵)来启用一点转动。主要问题是精灵正在旋转,导致过度的碰撞盒。我没有使用任何游戏引擎或OpenGL。
碰撞代码: offsetX& offsetY是位图宽度或高度/ 2,在蛇的头部调用。蛇(Bird)中的每个环节都是可放置的
public boolean doesHit(Placeable p) {
int xLen = Math.abs(this.x - p.x);
int yLen = Math.abs(this.y - p.y);
if (bmp != null) {
if (xLen < offsetX + p.offsetX && yLen < offsetY + p.offsetY)
return true;
} else {
if (xLen < Bird.BIG_W[Bird.mUseBird] / 2
&& yLen < Bird.BIG_H[Bird.mUseBird] / 2)
return true;
}
return false;
}
TL; DR /问题:
有没有办法旋转Rects然后比较它们(首选,因为游戏已经完成除此之外)?或者最简单的方法是移植到OpenGL /游戏引擎?
答案 0 :(得分:2)
最好的选择是使用OpenGL并使用带有交叉点的旋转多边形。
然而,对于快速黑客,我会改变doesHit()例程,将精灵视为圆形而不是矩形。这样,它们在旋转时不会在边界外生长。价格是碰撞检测在角落里会很糟糕。