【发布时间】:2015-10-13 09:49:38
【问题描述】:
我在矩形的封闭平铺地图中有一个旋转的矩形。 检查玩家(即旋转的矩形)是否与瓷砖地图的其中一个矩形相交的最佳方法是什么?
如果重要的话,玩家的类型是 sf::Shape,地图的数据在 int 数组中。
【问题讨论】:
我在矩形的封闭平铺地图中有一个旋转的矩形。 检查玩家(即旋转的矩形)是否与瓷砖地图的其中一个矩形相交的最佳方法是什么?
如果重要的话,玩家的类型是 sf::Shape,地图的数据在 int 数组中。
【问题讨论】:
SFML 不提供碰撞检测,它只有检查两个轴对齐的矩形是否相交的方法。如果你需要更复杂的东西,你必须自己实现。
如果不需要精确检测,可以用地图的矩形测试Sprite.getGlobalBounds().intersects(...)。
如果你想要理想的碰撞检测,你有不止一种选择:
【讨论】:
对于仍然遇到此问题的任何人:
您应该查看sf::Transformable (https://www.sfmldev.org/documentation/2.5.1/classsf_1_1Transformable.php) 的getTransform() 和getInverseTransform() 函数。获取玩家和特定墙的逆变换允许您使用简单的 AABB 碰撞算法(就像 SFML 已经在 getGlobalBounds().intersects(...) 中实现了它)。您基本上会查看玩家的本地坐标系以及墙是如何定位到它的,忽略所有平移、旋转和缩放。
【讨论】: