我有一个房子精灵和一个角色精灵。我不希望自己的角色经历过#34;房子精灵和所有未来的房子精灵。那么如何将house精灵添加到列表中然后使其成为house_sprites中的每个房子,角色精灵无法通过?或者,如果有任何其他方法可以使我的角色没有"通过"多个精灵没有编程它们的碰撞1到1.我使用c ++和sfml与xcode。我不想为每个" solid"编写以下代码。精灵在游戏中。那么我如何制作它以便我可以将精灵添加到列表中,如果我希望它是" solid"? `
if(sprite.getGlobalBounds().intersects(EnterHouse.getGlobalBounds()))
{
if (GoingLeft == true)
{
x_pos = x_pos + speed;
x = x + speed;
}
if(GoingDown == true)
{
y_pos = y_pos - speed;
y = y - speed;
}
if(GoingRight == true)
{
x_pos = x_pos - speed;
x = x - speed;
}
if(GoingUp == true and y > 2530)
{
y_pos = y_pos + speed;
y = y + speed;
}
if(GoingUp == true and x_pos < 20230)
{
x_pos = x_pos - speed;
x = x - speed;
}
if(GoingUp == true and x_pos > 20230)
{
x_pos = x_pos + speed;
x = x + speed;
}
if(GoingDown == true and x_pos < 20230)
{
x_pos = x_pos - speed;
x = x - speed;
}
if(GoingDown == true and x_pos > 20230)
{
x_pos = x_pos + speed;
x = x + speed;
}`
答案 0 :(得分:3)
SFML不会自动处理冲突,它是一个简单快速的多媒体库。您必须自己实施冲突或使用其他库,如Box2D。
答案 1 :(得分:0)
考虑到您的编辑,您可以执行以下操作:
有4个bool,每个方向一个:canGoUp
,canGoDown
,canGoLeft
和canGoRight
。
默认情况下将它们设置为false。 现在创建一个循环,在其中迭代要检查冲突的精灵列表,并进行碰撞检查:(伪c ++)
for (every collidableSprite)
if(sprite.getGlobalBounds().intersects(collidableSprite.getGlobalBounds())) {
(...) // Set the direction bools to true or false, depending on the direction of the house relative to the sprite
}
之后,你只需要让精灵移动,就像这样:
if (wantsToGoLeft && canGoLeft) {
// Move sprite to the left
}
else if (...)
你去吧。现在,如果你想要将你需要的另一个房子添加到你在第1步迭代的列表中。