如何让这个函数返回一个sf :: Texture? SFML2.0

时间:2012-11-12 00:11:34

标签: c++ textures sfml

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。

2 个答案:

答案 0 :(得分:2)

根据文档herehere,您应该

sf::Image fullImage = texture.copyToImage();
sf::Image croppedImage(width, height);
croppedImage.copy(fullImage, 0, 0, subRect);
sf::Texture returnTexture();
returnTexture.LoadFromImage(croppedImage);

答案 1 :(得分:2)

您目前拥有的方法getTile可以实现预期目标。您有一个tile管理类,可以加载整个spritesheet,并将裁剪区域作为精灵分发。不要只是为了解决这个问题而改变这个方法,你的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());