为什么我的精灵没有显示?

时间:2014-10-04 18:40:01

标签: c++ sfml

我有一个简单的程序,我设置一个精灵的纹理并改变它的颜色,但它不会显示。窗户完全是黑色的。我有没有做过什么?

#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 个答案:

答案 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;
}