跳转至

SFML 基本用法

项目地址:SFML

SFML(Simple and Fast Multimedia Library)是一个跨平台的多媒体开发库,提供窗口、图形、音频和网络等功能。

1. 基本概念与架构

SFML的核心模块包括:

  • 窗口(Window):创建和管理应用程序窗口
  • 图形(Graphics):绘制形状、文本、图片等
  • 音频(Audio):播放声音和音乐
  • 网络(Network):实现网络通信
  • 系统(System):提供时间、线程等基础功能

2. 安装与配置

  • 通过官方网站下载预编译的二进制文件或源码
  • 使用CMake配置项目,推荐使用官方提供的CMake模板
  • 根据平台(Windows、Linux、macOS)配置编译环境

3. 基本用法示例

3.1 创建窗口

#include <SFML/Graphics.hpp>

int main() {
    sf::RenderWindow window(sf::VideoMode(800, 600), "SFML Window");
    while (window.isOpen()) {
        sf::Event event;
        while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear(sf::Color::Black);
        // 绘制内容
        window.display();
    }
    return 0;
}

说明:创建一个800x600的窗口,主循环中处理事件和绘制。

3.2 绘制图形

sf::CircleShape circle(50);
circle.setFillColor(sf::Color::Green);
circle.setPosition(100, 100);

window.draw(circle);

说明:绘制一个绿色半径为50的圆。

3.3 加载和显示图片

sf::Texture texture;
if (!texture.loadFromFile("image.png")) {
    // 处理错误
}
sf::Sprite sprite(texture);
window.draw(sprite);

3.4 播放声音

sf::SoundBuffer buffer;
if (!buffer.loadFromFile("sound.wav")) {
    // 处理错误
}
sf::Sound sound(buffer);
sound.play();

4. 事件处理

SFML提供丰富的事件类型,如键盘、鼠标、窗口事件。

if (event.type == sf::Event::KeyPressed) {
    if (event.key.code == sf::Keyboard::Escape)
        window.close();
}

5. 高级功能

  • 动画:结合时间控制实现动画效果
  • 碰撞检测:使用形状的边界或像素检测
  • 多线程:利用SFML的系统模块实现多线程
  • 网络通信:实现客户端-服务器通信

6. 资源管理

  • 使用 sf::Texturesf::Font 等资源类加载和管理资源
  • 避免频繁加载,使用缓存机制

7. 参考资料