【问题标题】:sfml - put all objects in arraysfml - 将所有对象放入数组
【发布时间】:2017-07-20 23:27:04
【问题描述】:

我正在开发一款游戏,并希望当我创建一个对象时,它会被添加到一个数组中(这样更容易绘制,也许 改变坐标和东西)。 我只是不知道该怎么做。 如果它有帮助,这是我的功能:

void CreateTile(string Texture, sf::Vector2f Pos)
{
    sf::Texture texture;
    texture.loadFromFile(Texture);
    sf::Sprite Tile;
    Tile.setTexture(texture);
    Tile.setPosition(Pos);
}

提前致谢!

【问题讨论】:

  • 搜索std::vector
  • 没有掌握 C++ 基础的你为什么要做游戏?
  • 请确保不要将 sf::Texture 对象直接存储在向量中,因为它不是轻量级对象 :)

标签: c++ arrays sfml


【解决方案1】:

您可以使用标准库中的容器,最基本的是std::vector<>sf::Textureobjects 是不应该被不必要地复制的沉重对象。您应该将它们保存在一个地方,并且仅在需要时引用它们。

std::vector<sf::Sprite*> sprites;
std::vector<sf::Texture*> textures;

void CreateTile(const std::string& file, const sf::Vector2f& position)
{
    sf::Texture* texture = new sf::Texture();
    texture->loadFromFile(file);

    textures->push_back(texture);

    sf::Sprite* tile = new sf::Sprite();
    tile->setTexture(*texture);
    tile->setPosition(position);

    sprites->push_back(tile);
}

因为它的目标是现代 C++,所以你应该像上面那样使用原始指针。使用 smart 指针,例如std::shared_ptr

警告:解决方案不会只是复制此代码并希望它以某种方式起作用。获得一本关于 C++ 基础知识的好书,并从头到尾阅读。没有捷径。如果您想编写游戏代码,则需要学习语言。

【讨论】:

    猜你喜欢
    • 2021-02-24
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2023-02-14
    相关资源
    最近更新 更多