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::Texture、sf::Font等资源类加载和管理资源 - 避免频繁加载,使用缓存机制