用于检测两个旋转的正方形对象之间的碰撞的公式?

问题描述 投票:0回答:1

我正在制作自上而下的汽车游戏,我需要在汽车与赛道之间实现碰撞检测,但是我不需要任何分辨率。我正在使用SFML及其sf::RectangleShape对象存储汽车的位置和大小,并且将轨道分成多个矩形,以便可以检查所有它们与汽车之间的碰撞。

我已经实施了AABB碰撞,并且工作正常,但是每当我旋转汽车或履带板时,它都会断裂,因为这并不是要计算出来的。是否有仅用于计算此类碰撞的公式。

我已经尝试将汽车和轨道分割成线,并实现线与线的相交公式,但是麻烦太多了,反正还是行不通的。我应该坚持使用Box2D并让它为我处理碰撞吗?

c++ collision-detection box2d sfml
1个回答
0
投票

AABB碰撞在旋转时会失去其主要优点,速度。该算法依赖于框在坐标系中的工作方式如此之快,但是如果使用的框不完全符合您模型的形状。如果您希望获得更高的精度,请考虑按像素碰撞。

话虽这么说,我也在研究自上而下的碰撞游戏,而我想到的解决方案是:为什么要旋转盒子?

  • 如果汽车的长度不比宽度大,那么您可以在其周围放置一个大盒子,并根据其旋转方式将其用于碰撞。

  • [[或者,您可以在汽车的中心放置一个小盒子,当转弯时,它的角刚好碰到模型的边缘,并使用它来确保汽车保持在轨道上。
  • 第三种选择是为每个轮胎制造一个盒子,然后检查以确保这些(更小和更多盒子形状的)物体留在轨道上。

关于精度与速度,哪一个对您更重要?这将有助于指导您选择的路径。如果您愿意为使用AABB做出让步,我愿意这么做-速度带来的好处远胜于精度的轻微损失。毕竟,稍稍的延迟就会使玩家生气,但我什至都不会注意到点击框是否有点偏心。

© www.soinside.com 2019 - 2024. All rights reserved.