0
void TileSheetManager::setTileSheet(const string textureName)
{
    texture.loadFromFile(textureName);
}

sf::Sprite TileSheetManager::getTile(int left, int top, int width, int height)
{

    sf::IntRect subRect;
    subRect.left = left * 32;
    subRect.top = top * 32;
    subRect.width = width;
    subRect.height = height;

    sf::Sprite sprite(texture, subRect);

    return sprite;
}

我需要getTile()返回一个 sf::Texture 但我不知道该怎么做。
顺便说一句,我正在使用 SFML2.0。

4

2 回答 2

2

根据此处此处的文档,您应该能够

sf::Image fullImage = texture.copyToImage();
sf::Image croppedImage(width, height);
croppedImage.copy(fullImage, 0, 0, subRect);
sf::Texture returnTexture();
returnTexture.LoadFromImage(croppedImage);
于 2012-11-12T00:28:43.507 回答
2

您目前拥有的方法getTile可以完成它应该做的事情。您有一个 tile 管理类,它加载整个 spritesheet,并将裁剪区域作为 sprite 分发。不要仅仅为了解决这个问题而改变这个方法,你的TileSheetManager类结构很好。

如果要将其中一个精灵转换为纹理,可以尝试以下操作。

// Get a sprite from the Tile Manager.
sf::Sprite mySprite = tileSheetMgr.getTile(1,2,3,4);
// Create a new texture for the sprite returned.
sf::Texture spriteTexture;
// Generate the texture from the sprite's image.
spriteTexture.loadFromImage(*mySprite.getImage());
于 2012-11-12T00:46:47.723 回答