SFML C ++为什么屏幕上没有画出来? (简单代码)

时间:2018-03-26 22:00:47

标签: c++ sfml

这是我在C ++中使用SFML库的示例程序。我想创建一个自定义函数'draw_func',它在提供的坐标处绘制一些东西(如本例中的矩形)。我将返回变量的类型设置为sfml对象矩形(这是我返回的和我绘制的内容)但屏幕是黑色的。

#include <iostream>
#include <math.h>
#include "SFML/OpenGL.hpp"
#include <SFML/Graphics.hpp>

sf::RectangleShape draw_func(int x, int y)
{
    sf::RectangleShape rect(sf::Vector2f(200, 100));
    rect.setPosition(x, y);
    rect.setFillColor(sf::Color((0, 0, 255)));
    return rect;
}


int main()
{

    int height = 400;
    int length = 400;
    int pos_x = 0;
    int pos_y = 0;

    sf::RenderWindow window(sf::VideoMode(length, height), "My window");

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear(sf::Color::Black);

        sf::RectangleShape rectangle = draw_func(pos_x, pos_y);
        window.draw(rectangle);
        window.display();
    }

}

1 个答案:

答案 0 :(得分:4)

我认为问题在于这位政治家:

rect.setFillColor(sf::Color((0, 0, 255)));

双括号实际上解析为单个值0,因为:

sf::Color((0, 0, 255))

使用值sf::Color构建0,因为

(0, 0, 255) 

不是函数参数,因为额外的括号是表达式,涉及逗号运算符

0, 0, 255 

逗号运算符始终具有最左侧表达式的值。在这种情况下0

现在sf::Color有一个构造函数,它只接受一个值:

sf::Color(Uint32 color);

您正在创建黑色 sf::Color(0)