我目前正在尝试复制蛙人,并且正在努力解决与水和原木相关的碰撞检测问题。
我可以拥有它,如果青蛙跳上原木,它会随着木头一起携带,如果它与水碰撞,我也可以让青蛙重生,但我不能同时拥有它们。当我尝试它时,只需将水碰撞而不是其他任何东西。
这可能是因为水是一个大的矩形,顶部的日志是较小的矩形,但是原木的大小和运动使得青蛙在日志上齐平。
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();
}
}
答案 0 :(得分:1)
您的逻辑略有缺陷。当然,如果if语句的第一部分触发,则第二部分将没有机会激活。但是,您为每个日志运行该代码段。除非您的青蛙与每个原木相交,否则它会在每一次重生。
您需要的是类似的东西
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根日志,则表示您是安全的。如果没有,请飞溅。
答案 1 :(得分:0)
你没有显示你如何计算碰撞,但最可能的是,如果青蛙与两者发生碰撞(这是一个选项),你总是认为它只与日志相撞。至少你在你发布的一小段代码中说了些什么。