Как я могу заставить эту функцию возвращать sf :: Texture? SFML2.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, кстати.

0

Решение

Согласно документации Вот а также Вот ты должен быть способен

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

Другие решения

Метод getTile что у вас есть в данный момент, делает то, что должен. У вас есть класс управления плитками, который загружает всю таблицу спрайтов и раздает обрезанные области как спрайты. Не меняйте этот метод только для решения этой проблемы, ваш 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());
2

По вопросам рекламы [email protected]