我正在制作自上而下的汽车游戏,我需要在汽车与赛道之间实现碰撞检测,但是我不需要任何分辨率。我正在使用SFML及其sf::RectangleShape
对象存储汽车的位置和大小,并且将轨道分成多个矩形,以便可以检查所有它们与汽车之间的碰撞。
我已经实施了AABB碰撞,并且工作正常,但是每当我旋转汽车或履带板时,它都会断裂,因为这并不是要计算出来的。是否有仅用于计算此类碰撞的公式。
我已经尝试将汽车和轨道分割成线,并实现线与线的相交公式,但是麻烦太多了,反正还是行不通的。我应该坚持使用Box2D并让它为我处理碰撞吗?
AABB碰撞在旋转时会失去其主要优点,速度。该算法依赖于框在坐标系中的工作方式如此之快,但是如果使用的框不完全符合您模型的形状。如果您希望获得更高的精度,请考虑按像素碰撞。
话虽这么说,我也在研究自上而下的碰撞游戏,而我想到的解决方案是:为什么要旋转盒子?
如果汽车的长度不比宽度大,那么您可以在其周围放置一个大盒子,并根据其旋转方式将其用于碰撞。
关于精度与速度,哪一个对您更重要?这将有助于指导您选择的路径。如果您愿意为使用AABB做出让步,我愿意这么做-速度带来的好处远胜于精度的轻微损失。毕竟,稍稍的延迟就会使玩家生气,但我什至都不会注意到点击框是否有点偏心。