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;
}

sf::Texture を返す必要がありgetTile()ますが、それを行う方法がわかりません。
ちなみに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あなたが現在持っている方法は、それが想定されていることを行います。スプライトシート全体をロードし、トリミングされた領域をスプライトとして配布するタイル管理クラスがあります。この問題を解決するためだけにこのメソッドを変更しないでください。TileSheetManagerクラスは適切に構成されています。

スプライトの 1 つをテクスチャに変換したい場合は、次の方法を試すことができます。

// 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 に答える