📜  SFML 窗口 - C++ (1)

📅  最后修改于: 2023-12-03 15:05:11.689000             🧑  作者: Mango

SFML 窗口 - C++

简介

SFML(Simple and Fast Multimedia Library)是一个现代的 C++ 图形库,可用于开发游戏和多媒体应用程序。SFML 提供了一个易于使用的接口,并且支持多种平台,包括 Windows、Linux 和 macOS。SFML 可以处理音频、图像和输入,并提供了绘制 2D 图形所需的所有工具。

本文将介绍如何使用 SFML 创建窗口并处理基本输入事件。

安装 SFML

首先,需要从 SFML 官方网站下载并安装 SFML。当前可用的版本为 2.5.1,可以通过以下链接下载:

https://www.sfml-dev.org/download/sfml/2.5.1/

下载完毕后,按照说明进行安装。

创建窗口

要创建窗口,需要以下代码:

#include <SFML/Graphics.hpp>

int main()
{
    // 创建窗口
    sf::RenderWindow window(sf::VideoMode(640, 480), "SFML 窗口");

    // 运行主循环
    while (window.isOpen())
    {
        // 处理事件
        sf::Event event;
        while (window.pollEvent(event))
        {
            // 关闭窗口
            if (event.type == sf::Event::Closed)
                window.close();
        }

        // 绘制窗口
        window.clear();
        // ...
        window.display();
    }

    return 0;
}

在上面的代码中,我们首先包含了 SFML 的头文件 SFML/Graphics.hpp。接着,我们创建了一个 RenderWindow 对象,指定窗口的大小和标题。然后,我们进入了主循环,不断处理事件并绘制窗口。如果用户关闭窗口,我们就调用 window.close() 关闭窗口。

注意,在每次重新绘制窗口之前,要先调用 window.clear() 清空窗口。

处理输入事件

要处理输入事件,我们需要在主循环中添加如下代码:

while (window.isOpen())
{
    // 处理事件
    sf::Event event;
    while (window.pollEvent(event))
    {
        // 关闭窗口
        if (event.type == sf::Event::Closed)
            window.close();

        // 处理键盘事件
        if (event.type == sf::Event::KeyPressed)
        {
            // 按下 ESC 键关闭窗口
            if (event.key.code == sf::Keyboard::Escape)
                window.close();
        }
    }

    // 绘制窗口
    window.clear();
    // ...
    window.display();
}

在上面的代码中,我们首先加入了一个内层循环,用于处理所有当前未处理的事件。在处理事件时,我们首先处理了关闭窗口的事件,然后检查是否有键盘事件。如果用户按下了 ESC 键,我们就调用 window.close() 关闭窗口。

除了键盘事件,SFML 还可以处理鼠标事件、触摸事件等多种输入事件。具体信息请参见官方文档。

总结

本文介绍了如何创建 SFML 窗口和处理基本输入事件。要深入了解 SFML,可以参考官方文档:

https://www.sfml-dev.org/documentation/2.5.1/

SFML 是一个强大而易于使用的图形库,非常适合开发游戏和多媒体应用程序。