SFML学习笔记(二)绘制几何图形

SFML绘制几何图形

绘制过程
  1. 清除画布
  2. 在画布上绘制
  3. 显示画布

SFML中绘制几何图形的类

  1. sf::RectangleShape
  2. sf::CircleShape
  3. 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没有专门画线的类,原因很简单:如果线条有粗细,它就是矩形。如果没有,可以用线条基元来绘制。

  1. 通过绘制矩形来画有粗细的线条
sf::RectangleShape line(sf::Vector2f(150.f, 5.f));
line.rotate(45.f);
  1. 用顶点数组画无粗细的线条
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值