这是我在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();
}
}
答案 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)
。