我有一个包含精灵的矢量,我用它作墙:
std::vector<Sprite> wallSprites(30, Sprite(walltexture));
重复这些:
for (int i = 0; i < wallSprites.size(); i++) {
wallSprites[i].setPosition(wallPosX,0);
wallPosX += 63;
wallSprites[i].setOrigin(0,0);
}
然后绘制:
for (int i = 0; i < wallSprites.size(); i++) {
app.draw(wallSprites[i]);
}
然后我想看看汽车精灵是否与任何墙壁精灵相撞。我正在尝试使用此代码迭代所有的wallSprites,但它只检测到汽车击中最后一个墙精灵:
for (int i = 0; i < wallSprites.size(); i++) {
if (car.getGlobalBounds().intersects(wallSprites[i].getGlobalBounds()))
{
crashed = true;
}
else
{ // We're not colliding
crashed = false;
}
}
我哪里出错了?
答案 0 :(得分:0)
如果汽车撞到的墙不是最后一面,crashed
将设置为true
。如果它没有与下一个墙碰撞,它将再次设置为false
。那不是你想要的。
因此,解决方案很简单:
for (int i = 0; i < wallSprites.size(); i++) {
if (car.getGlobalBounds().intersects(wallSprites[i].getGlobalBounds()))
{
crashed = true;
break;
}
}
这假设crashed
开始false
。当它到达任何墙时,它将变为true
,这是所需的行为。还有一个额外的break
,它不是必须的,但为什么我们已经知道答案时继续呢?
或者,根据您的代码,您的crashed
变量可能已成为该修复的冗余,允许您将其减少为:
for (int i = 0; i < wallSprites.size(); i++) {
if (car.getGlobalBounds().intersects(wallSprites[i].getGlobalBounds()))
{
handleCarCollision();
break;
}
}