如何制作一个sfml精灵列表并使用for循环使它们变得坚固#34;

时间:2017-11-04 21:59:38

标签: c++

我有一个房子精灵和一个角色精灵。我不希望自己的角色经历过#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;
        }`

2 个答案:

答案 0 :(得分:3)

SFML不会自动处理冲突,它是一个简单快速的多媒体库。您必须自己实施冲突或使用其他库,如Box2D。

答案 1 :(得分:0)

考虑到您的编辑,您可以执行以下操作: 有4个bool,每个方向一个:canGoUpcanGoDowncanGoLeftcanGoRight

默认情况下将它们设置为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步迭代的列表中。