我目前正在尝试复制 frogger,并且正在为与水和原木相关的碰撞检测而苦苦挣扎。
我可以拥有它,如果 Frog 跳到木头上,它会随木头一起携带,我也可以让 Frog 在与水碰撞时重生,但我不能同时拥有两者。当我尝试时,它只会让水碰撞超过其他任何东西。
这可能是因为水是一个大矩形,上面的原木是较小的矩形,但是原木的大小和运动使得 Frog 平坐在原木上。
for (size_t i = 0; i < viLogS.size(); i++)
{
if (viLogS[i].getGlobalBounds().intersects(player.getGlobalBounds()))
{
player.move(-2, 0); //if frog and log intersect move frog along same axis and speed as log
}
else if (waterzone.waterRectangle.getGlobalBounds().intersects(player.getGlobalBounds()))
{
player.FrogRespawn();
}
}
最佳答案
你的逻辑有点问题。当然,如果 if 语句的第一部分触发,那么第二部分将没有机会激活。但是,您为每个日志运行该片段。除非你的 Frog 与每根原木相交,否则它每次都会重生。
你需要的是这样的:
if (waterzone.waterRectangle.getGlobalBounds().intersects(player.getGlobalBounds()))
{
bool safe = false;
for (size_t i = 0; i < viLogS.size(); i++)
{
if (viLogS[i].getGlobalBounds().intersects(player.getGlobalBounds()))
{
player.move(-2, 0); //if frog and log intersect move frog along same axis and speed as log
safe = true;
}
}
if (!safe)
{
player.FrogRespawn();
}
}
这会检查您是否在水域中(我假设您也有陆地区域有陆地危险,如果不是,这可以简化)并且如果您只与 1 个日志相交,那么您将被宣布为安全。如果没有,请飞溅。
关于具有重叠矩形的 C++ 碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49587529/