【发布时间】: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 类的属性并且仍然存在。
谁能告诉我这里发生了什么?任何帮助,将不胜感激。
【问题讨论】: