gpt4 book ai didi

具有重叠矩形的 C++ 碰撞检测

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:23 26 4
gpt4 key购买 nike

我目前正在尝试复制 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com