SFML绘制几何图形
绘制过程
- 清除画布
- 在画布上绘制
- 显示画布
SFML中绘制几何图形的类
- sf::RectangleShape
- sf::CircleShape
- sf::ConvexShape
1.绘制矩形图形
sf::RectangleShape rectangle; //实例化对象
rectangle.setSize(sf::Vector2f(100, 50)); //设置矩形的长、宽
//直接用构造函数创建矩形对象 sf::RectangleShape rectangle(sf::Vector2f(100, 50));
rectangle.setFillColor(sf::Color::Green); //设置填充色
rectangle.setOutlineColor(sf::Color::Red); //设置外边框的颜色
rectangle.setOutlineThickness(5); //设置外边框的宽度
rectangle.setPosition(10, 20); //设置矩形左上角在坐标中的位置
2.绘制圆形
sf::CircleShape circle; //实例化对象
circle.setSize(sf::Vector2f(100, 50)); //设置矩形的长、宽
//直接用构造函数创建矩形对象 sf::RectangleShape rectangle(sf::Vector2f(100, 50));
circle.setFillColor(sf::Color::Green); //设置填充色
circle.setOutlineColor(sf::Color::Red); //设置外边框的颜色
circle.setOutlineThickness(5); //设置外边框的宽度
circle.setPosition(10, 20); //设置矩形左上角在坐标中的位置
3.利用sf::CircleShape 绘制正多边形
//1.正三角形(等边三角形)
sf::CircleShape circle2;
circle2.setRadius(50);
circle2.setPointCount(3); //设置顶点数
//2.正五边形
sf::CircleShape circle3;
circle3.setRadius(50);
circle3.setPointCount(5); //设置顶点数
4.sf::ConvexShape 绘制多边形
用sf::ConvexShap绘制多边形时,先设置顶点数,再按顺序设置每个顶点位置。
//绘制多边形----三角形
sf::ConvexShape triangle;
triangle.setPointCount(3);
triangle.setPoint(0,sf::Vector2f(100,0));
triangle.setPoint(1,sf::Vector2f(100,100));
triangle.setPoint(2, sf::Vector2f(0, 100));
triangle.setFillColor(sf::Color::Blue);
triangle.setPosition(sf::Vector2f(300.f,20.f));
5.画线
SFML没有专门画线的类,原因很简单:如果线条有粗细,它就是矩形。如果没有,可以用线条基元来绘制。
- 通过绘制矩形来画有粗细的线条
sf::RectangleShape line(sf::Vector2f(150.f, 5.f));
line.rotate(45.f);
- 用顶点数组画无粗细的线条
sf::Vertex line[] =
{
sf::Vertex(sf::Vector2f(10.f, 10.f)),
sf::Vertex(sf::Vector2f(150.f, 150.f))
};
window.draw(line, 2, sf::Lines);
5.实例代码
#include <SFML/Graphics.hpp>
//SFML 绘制图形
//窗口宽度
const int WINDOW_WIDTH = 800;
//窗口高度
const int WINDOW_HEIGHT = 600;
int main()
{
sf::RenderWindow window(sf::VideoMode(WINDOW_WIDTH,WINDOW_HEIGHT),"Shapes and Sprite");
//1.绘制长方形矩形
sf::RectangleShape rectangle(sf::Vector2f(120.f, 50.f));
//设置填充色
rectangle.setFillColor(sf::Color::Green); //设置填充色
rectangle.setOutlineColor(sf::Color::Red); //设置外边框的颜色
rectangle.setOutlineThickness(2); //设置外边框的宽度
rectangle.setPosition(sf::Vector2f(10.f,100.f)); //设置位置
//2.绘制正方形矩形
sf::RectangleShape square(sf::Vector2f(100.f, 100.f));
square.setFillColor(sf::Color::Green);
square.setOutlineColor(sf::Color::Red);
square.setOutlineThickness(2);
square.setPosition(sf::Vector2f(200.f,100.f));
//3.圆形
sf::CircleShape circle;
circle.setRadius(50.f) ; //设置半径
circle.setFillColor(sf::Color::Green); //设置填充色
circle.setOutlineColor(sf::Color::Red); //设置外边框的颜色
circle.setOutlineThickness(2); //设置外边框的宽度
circle.setPosition(400.f, 100.f); //设置矩形左上角在坐标中的位置
//4.用 sf::CircleShape 等边三角形
sf::CircleShape circle2;
circle2.setRadius(50);
circle2.setPointCount(3); //可以尝试修改点数来验证
//5.正五边形
sf::CircleShape circle3;
circle3.setRadius(50);
circle3.setPointCount(5); //可以尝试修改点数来验证
circle3.setPosition(100.f,0.f);
//5.绘制多边形----三角形
//先设置顶点数,再按顺序设置顶点位置
sf::ConvexShape triangle;
triangle.setPointCount(3);
triangle.setPoint(0,sf::Vector2f(100,0));
triangle.setPoint(1,sf::Vector2f(100,100));
triangle.setPoint(2, sf::Vector2f(0, 100));
triangle.setFillColor(sf::Color::Blue);
triangle.setPosition(sf::Vector2f(300.f,20.f));
//6.绘制有粗细的线条
sf::RectangleShape line(sf::Vector2f(150.f, 5.f));
line.rotate(45.f);
line.setPosition(300.f,100.f);
//绘制无粗细的线条
sf::Vertex line2[] =
{
sf::Vertex(sf::Vector2f(10.f, 10.f)),
sf::Vertex(sf::Vector2f(150.f, 150.f))
};
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(rectangle);
window.draw(square);
window.draw(circle);
window.draw(circle2);
window.draw(circle3);
window.draw(triangle);
window.draw(line);
window.draw(line2, 2,sf::Lines);
window.display();
}
return 0;
}