2014-10-04 136 views
0

我有一個簡單的程序,我設置一個精靈的紋理並改變它的顏色,但它不會顯示。窗戶完全是黑色的。有沒有我沒有做的事情?爲什麼我的精靈不顯示?

#include <SFML/Graphics.hpp> 

int main() 
{ 
    sf::Texture texture; 
    sf::Sprite sprite; 

    texture.create(200, 200); 

    sprite.setTexture(texture); 
    sprite.setColor(sf::Color(209, 59, 59)); 

    while (window.isOpen()) 
    { 
     window.clear(); 
     window.draw(sprite); 
     window.display(); 
    } 

    return 0; 
} 
+1

也許是默認的質感純黑色的,所以即使設定精靈的顏色不顯示任何內容? – BWG 2014-10-04 18:43:26

+0

@BWG紋理不具有操縱其顏色的功能。 – user2030677 2014-10-04 18:45:57

+1

必須有某種方式來改變紋理。也許你可以從'sf :: Image'加載它,你改變了顏色? – BWG 2014-10-04 18:48:44

回答

1

由於sf::Sprite::setColor()方法的工作原理,將顏色設置爲精靈而其紋理的像素沒有顏色將不起作用。

從SFML文檔:

無效SF ::雪碧::爲setColor(const的顏色&顏色)

這種顏色調製(相乘)與精靈的質感。它可以用來爲精靈着色,或者改變其全局不透明度。默認情況下,精靈的顏色是不透明的白色。

將任何顏色與透明紋理相乘都不會改變Sprite的渲染方式。

一個解決方案是創建一個尺寸爲200,200的圖像,並使用sf::Image::create (width, height, color)構造函數將圖像設置爲所需的顏色,然後從該圖像加載紋理。

示例代碼:

#include <SFML/Graphics.hpp> 

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(500,500), "TEST"); 

    sf::Image image; 
    image.create(200,200,(sf::Color(209, 59, 59))); 

    sf::Texture texture; 
    texture.loadFromImage(image); 

    sf::Sprite sprite; 
    sprite.setTexture(texture); 

    while (window.isOpen()) 
    { 
     window.clear(); 
     window.draw(sprite); 
     window.display(); 
    } 

    return 0; 
}