简单的二维平台碰撞检测?

我相对比较新的编程,我正在尝试使用SFML库在C ++中编写2D平台变形器。

我的代码的结构是我有一个Stage类,它包含一个sf :: RectangleShape(舞台平台)的向量。 我在舞台课上有一个方法来检查玩家的hitbox和舞台之间的碰撞如下:

bool Stage::checkForStageCollisions(sf::RectangleShape player) { for (unsigned int i = 0; i < collidableObjects.size(); i++) { if (player.getGlobalBounds().intersects(collidableObjects[i].getGlobalBounds())) { return true; } } return false; } 

然后在我的球员类中,我可以根据是否发生碰撞来执行逻辑。 问题是我需要知道玩家碰撞哪个物体,将它们移动到合适的位置。 我是否以这种错误的方式去做? 任何帮助,将不胜感激。 谢谢!

你完全是目标。 一种方法是返回一个整数,它是你所打的那个索引的一个索引,如果没有被打到的话,返回一个“特殊值”。 所以:

 int Stage::checkForStageCollisions(sf::RectangleShape player) { ... return i; ... return -1; } 

在其他地方你可以说, if(checkResult >= 0) [something was hit] 。 或者用checkResult这个被命中的矩形的索引做一些事情。

如果每个“你可能碰到的东西”都有几个矩形,那么你需要更多的列表或者某个东西从这个索引转换为你真正关心的值。

希望有所帮助。