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。
答案 0 :(得分:2)
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());