【发布时间】:2018-09-10 06:26:46
【问题描述】:
我目前正在尝试复制青蛙,并且正在努力解决与水和原木有关的碰撞检测。
我可以拥有它,所以如果青蛙跳到原木上,它会随原木携带,我也可以让青蛙在与水相撞时重生,但我不能同时拥有。当我尝试时,它只会让水碰撞超过其他任何东西。
这可能是因为水是一个大矩形,顶部的原木是较小的矩形,但原木的大小和运动使它成为青蛙坐在原木上的齐平。
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();
}
}
【问题讨论】:
-
我猜问题在于它是一个循环。也许试着把它分成两个循环,因为你不相交的任何日志都会自动给你 else case -> water collision。至少在我看来是这样。
-
我同意 Beko 的评论,您的问题似乎是,如果您至少有两个原木,青蛙需要与这两个原木发生碰撞才能使其不重生。您应该(例如)只检查循环中与日志的碰撞并更新一个布尔变量,如果青蛙没有与任何日志碰撞,则该变量为真,然后如果该布尔变量为真并且青蛙与水相撞,则重新生成。
-
是的,你是对的,我可以跳到第一根原木上,但是一旦第二根原木生成,它就会跳到水碰撞语句。
-
intersect方法是否返回对相交矩形的引用(在这种情况下,它总是返回 true,对于空矩形也是如此——你必须检查这个)还是谓词,在感觉它说true或false如果它相交。矩形类是否有一个布尔类型的映射,可以让您检查是否为空?
标签: c++ visual-studio sfml