今天开始学习sfml3

SFML 简介

SFML(Simple and Fast Multimedia Library)是一个简单快速的多媒体库,主要用于游戏开发。它提供了以下模块:

  • Graphics - 2D 图形渲染
  • Audio - 音频播放和录制
  • Window - 窗口管理和事件处理
  • System - 系统工具(线程、时钟等)
  • Network - 网络通信

SFML 支持多种编程语言,包括 C++、C、Java、.NET、Python、Ruby 等。

欢迎

这是SFML 3.0版本的学习记录,与之前2.0版本有较大的修改,请注意区别。

如果你在寻找教程,可以访问官方网站:www.sfml-dev.org


简短示例

下面是一个官方简短的示例,

#include <SFML/Audio.hpp>
#include <SFML/Graphics.hpp>

int main()
{
    // 创建主窗口
    sf::RenderWindow window(sf::VideoMode({800, 600}), "SFML window");

    // 加载要显示的精灵
    const sf::Texture texture("cute_image.jpg");
    sf::Sprite sprite(texture);

    // 创建要显示的图形文本
    const sf::Font font("arial.ttf");
    sf::Text text(font, "Hello SFML", 50);

    // 加载要播放的音乐
    sf::Music music("nice_music.ogg");

    // 播放音乐
    music.play();

    // 开始游戏循环
    while (window.isOpen())
    {
        // 处理事件
        while (const std::optional event = window.pollEvent())
        {
            // 关闭窗口:退出
            if (event->is<sf::Event::Closed>())
                window.close();
        }

        // 清屏
        window.clear();

        // 绘制精灵
        window.draw(sprite);

        // 绘制字符串
        window.draw(text);

        // 更新窗口
        window.display();
    }
}

代码详解

1. 头文件引入

#include <SFML/Audio.hpp>   // 音频模块
#include <SFML/Graphics.hpp> // 图形模块
  • 引入 SFML 的音频和图形模块,这是使用 SFML 最常用的两个模块。

2. 创建窗口

sf::RenderWindow window(sf::VideoMode({800, 600}), "SFML window");
  • 创建一个 800x600 像素的渲染窗口,标题为 "SFML window"

3. 加载和显示图片

const sf::Texture texture("cute_image.jpg");  // 加载纹理
sf::Sprite sprite(texture);                    // 创建精灵
  • Texture 类用于加载图片文件
  • Sprite 类用于在屏幕上显示纹理

4. 创建文本

const sf::Font font("arial.ttf");             // 加载字体
sf::Text text(font, "Hello SFML", 50);        // 创建文本对象
  • Font 类用于加载字体文件
  • Text 类用于显示文本,参数分别为:字体、内容、字号

5. 播放音乐

sf::Music music("nice_music.ogg");            // 加载音乐
music.play();                                   // 播放音乐
  • Music 类用于播放长音频文件(如背景音乐)

6. 主游戏循环

while (window.isOpen())
  • 只要窗口保持打开,循环就会继续执行

7. 事件处理

while (const std::optional event = window.pollEvent())
{
    if (event->is<sf::Event::Closed>())
        window.close();
}
  • 处理窗口事件,如关闭窗口、鼠标点击、键盘按键等
  • 当检测到关闭事件时,关闭窗口

8. 渲染过程

window.clear();      // 清空屏幕
window.draw(sprite); // 绘制精灵
window.draw(text);   // 绘制文本
window.display();    // 更新显示
  • 每次循环都要:清空 → 绘制 → 显示

posted @ 2026-03-12 13:56  飞丶鸟  阅读(72)  评论(0)    收藏  举报