visual studio-C++SFML从地图返回所有精灵

visual studio - C++ SFML returning all sprites from map

本文关键字:精灵 返回 地图 studio-C++SFML visual      更新时间:2023-10-16

当前我的代码有问题。我什么都试过了。图像在这里我希望有人能帮助我:)。顺便说一句,我是c++的新手

for each不是有效的C++;从C++11开始,正确的表达式是for (<type> <variable> : <collection>)

在这里,您还试图通过sprites.value_comp访问元素集合,这是一个函数,在这里没有意义。

假设spritesstd::set容器,您可以通过以下方式对其进行迭代:

for (auto sprite : sprites) {
    // sprite is the value you're looking for
}

如果您使用std::map,请使用相同的循环,但sprite将不包含sf::Sprite,而是包含其密钥,并且您需要使用sprite.second来访问精灵。

请注意,auto关键字允许编译器确定变量的类型。

如果您的编译器不支持C++11,则需要执行以下操作:

std::set<sf::Sprite>::iterator it;
for (it = sprites.begin(); it != sprites.end(); ++it)
{
    // Access each sprite using *it (the star is necessary here)
}

使用std::map:

// Replace "keyType" with the type of the keys, such as int or std::string
std::map<keyType, sf::Sprite>::iterator it;    for (it = sprites.begin(); it != sprites.end(); ++it)
{
    // Access each sprite using it->second
}

然而,如果你只是想把你的std::set转换成std::vector,有更简单的方法:

std::vector <sf::Sprite> sprites_c2;
std::copy(sprites.begin(), sprites.end(), std::back_inserter(sprites_c2));

对于std::map,没有任何单行版本,因此您必须使用循环进行迭代,正如我上面所说的那样。

#include <SFMLGraphics.hpp>
std::map<std::string, sf::Sprite> sprites;
void addSprite(std::string sprite_name, sf::Texture sprite_texture) {
    sf::Sprite sprite;
    sprite.setTexture(sprite_texture);
    sprites[sprite_name] = sprite;
}
sf::Sprite getSprite(std::string sprite_name) {
    return sprites[sprite_name];
}
std::vector<sf::Sprite> getSprites() {
    std::vector<sf::Sprite> sprites_c2;
    for each (sf::Sprite sprite in sprites.value_comp) {
        sprites_c2.emplace_back(sprite);
    }
    return sprites_c2;
}