我有一个简单的程序,我设置一个精灵的纹理并改变它的颜色,但它不会显示。窗户完全是黑色的。我有没有做过什么?
#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;
}
答案 0 :(得分:1)
由于sf::Sprite::setColor()
方法的工作原理,在纹理的像素没有颜色时将颜色设置为精灵不起作用。
来自SFML文档:
void sf :: Sprite :: setColor(const Color&amp; color)
使用精灵的纹理调制(乘以)此颜色。它可用于着色精灵,或改变其全局不透明度。默认情况下,精灵的颜色是不透明的白色。
将任何颜色与透明纹理相乘不会改变Sprite的渲染方式。
一种解决方案是使用sf::Image::create (width, height, color)
构造函数创建大小为200,200的图像并将图像设置为所需的颜色,然后从该图像加载纹理。
示例代码:
#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;
}