2014-10-04 119 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; 
}