【问题标题】:White Square in SFML, Sprite and texture stored in different objectsSFML 中的白色方块、存储在不同对象中的 Sprite 和纹理
【发布时间】:2016-08-19 18:49:08
【问题描述】:

我正在体验 SFML 中的 white square problem。我正在开发一款使用平铺地图的游戏。 Game 类会将瓦片集作为 sf::Texture 从文件加载,然后Game 中的 getTileById 函数将从瓦片集纹理中“剪切”出适当的瓦片。例如。

sf::Sprite GameScreen::getSpriteByPos(int pos, sf::Texture texture, int tileSize) {
    sf::IntRect subRect;
    subRect.left = (pos-1)*tileSize;
    subRect.top = (pos-1)*tileSize;
    subRect.width = tileSize;
    subRect.height = tileSize;

    sf::Sprite tileSprite(texture, subRect);
    return tileSprite;
}

然后精灵将被传递到一个 Tile 对象中,然后将其 sprite_ 属性设置为它。例如。

void Tile::setSprite(sf::Sprite sprite) {
    sprite_ = sprite;
}

Game 对象将以这种方式加载所有图块并将它们全部存储在一个向量中。为了绘制它们,它将遍历向量并在每个向量上调用Tile::draw(sf::RenderWindow&) 方法(传入要绘制到的 RenderWindow)。这个方法需要一个 sf::RenderWindow 并且 tile 只需调用 RenderWindow 上的 sf::RenderWindow::draw(sf::Sprite) 及其 sprite_ 属性。例如。

void Tile::draw(sf::RenderWindow &window){
    window.draw(sprite_);
    return;
}

我想以这种方式绘图,因为Tile::draw 方法是从Drawable 类继承的,因此所有可绘制对象都可以从 Drawable 继承并以适合它们的方式实现其绘图方法,我的项目中需要的东西。精灵被绘制成一个白色方块,这让我感到奇怪,因为 tileSet_ 属性没有被破坏,它是Game 类的属性并且仍然存在。

谁能告诉我这里发生了什么?任何帮助,将不胜感激。

【问题讨论】:

    标签: c++ oop graphics sfml


    【解决方案1】:

    您正在“按价值”传递您的纹理。这意味着您可以在此函数中获得纹理的副本:

    sf::Sprite GameScreen::getSpriteByPos(int pos, sf::Texture texture, int tileSize) {
        sf::IntRect subRect;
        subRect.left = (pos-1)*tileSize;
        subRect.top = (pos-1)*tileSize;
        subRect.width = tileSize;
        subRect.height = tileSize;
    
        sf::Sprite tileSprite(texture, subRect);
        return tileSprite;
    }
    

    但该副本在函数结束时被销毁。

    你不需要那个副本,所以不要复制:

    sf::Sprite GameScreen::getSpriteByPos(int pos, const sf::Texture& texture, int tileSize) {
        sf::IntRect subRect;
        subRect.left = (pos-1)*tileSize;
        subRect.top = (pos-1)*tileSize;
        subRect.width = tileSize;
        subRect.height = tileSize;
    
        sf::Sprite tileSprite(texture, subRect);
        return tileSprite;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2021-02-01
      • 2020-07-13
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多