2012-11-12 32 views
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 ::纹理但我不知道我该怎么做。
我正在使用SFML2.0。如何让这个函数返回一个sf :: Texture? SFML2.0

+0

是sfml简单而快速的多媒体库?如果是这样,你使用的是哪个版本? http://www.sfml-dev.org/documentation/1.6/annotated.php不包含一个Texture类。这是你自己开发的课程吗? – emartel

+0

我安装了库,这就是我有sf :: Sprite和sf :: IntRect。我说的是,无论如何裁剪像sf :: Sprite sprite(texture,subRect);但用sf :: Texture而不是sf :: Sprite? – user1816388

+0

基本上我想将剪裁纹理的sf ::纹理返回到子目录。 – user1816388

回答

2

根据文档herehere你应该能够

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

经过一些调整,我一次都没有错误,但现在我需要等待它编译几分钟,直到我看到它是否工作或没有! – user1816388

+0

这工作,非常感谢! – user1816388

2

的方法getTile,你必须在此刻做什么它应该。你有一个tile管理类加载一个完整的spritesheet,并将裁剪后的区域转换为sprites。不要为了解决这个问题而改变这个方法,你的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()); 
相关问题