2013-10-17 55 views
3

Heyy,我想在我的SFML應用程序繪製一個精靈,但其質地一定是白色,當我使用的圖像和紋理是類成員sf ::紋理作爲類成員不起作用?

類成員:

sf::Sprite myimg; 
sf::Image myimg_image; 
sf::Texture myimg_texture; 

當我再創建像這樣在我的CPP精靈文件

// create image 
myimg_image.create(icon.width, icon.height, icon.pixelData); 

// create texture from image 
myimg_texture.create(icon.width, icon.height); 
myimg_texture.update(myimg_image); 

// apply texture to sprite 
myimg.setTexture(myimg_texture); 

只汲取當我window.draw(myimg)繪製一個白色的精靈

(圖標是一個包含圖像信息的結構..它只是我想要使用的圖像,用GIMP作爲C源導出)

我嘗試了一下,並意識到當我創建上述類成員不是類在主函數中成員,但作爲局部變量,影像是否正確繪製...

但是,這並不能幫助我,因爲我需要他們的成員,因爲我想從其它功能

訪問它們你能幫我嗎我只是不知道該怎麼辦:(

回答

6

這就是所謂的the white square problem

基本上,在某些時候,您的對象被複制,但複製構造函數不會更新複製的sprite紋理以使用複製的紋理,並且原始紋理被破壞,因此複製的sprite不再具有有效紋理。

快速修復可以簡單地運行復制構造函數和複製賦值運算符中的初始化代碼。


BTW

myimg_texture.create(icon.width, icon.height); 
myimg_texture.update(myimg_image); 

可以直接使用icon.pixelData代替myimg_image,因此你不需要一個sf::Image可言。

或者你可以做如下,如果你需要的sf::Image用於其他目的:

myimg_texture.loadFromImage(myimg_image); 
+0

感謝您的答覆!我其實只寫了一個擁有我所有資源的課程。現在沒有任何紋理丟失了,一切正常!另外,感謝您給我的其他信息。我不再需要使用sf :: Image了。謝謝! –