常见任务速查
面向日常引擎任务的最短可运行片段。类型与签名细节见各模块页。
1) 创建窗口 + 游戏循环
Section titled “1) 创建窗口 + 游戏循环”#include <SFML/Graphics.hpp>
int main() { sf::RenderWindow window(sf::VideoMode({1280, 720}), "Engine", sf::Style::Default); window.setVerticalSyncEnabled(true); // 或 setFramerateLimit(60),二选一
sf::Clock clock; while (window.isOpen()) { while (const std::optional event = window.pollEvent()) { if (event->is<sf::Event::Closed>()) window.close(); else if (const auto* key = event->getIf<sf::Event::KeyPressed>()) { if (key->scancode == sf::Keyboard::Scancode::Escape) window.close(); } }
const sf::Time dt = clock.restart(); (void)dt; // 更新逻辑
window.clear(sf::Color(30, 30, 40)); // window.draw(...); window.display(); }}handleEvents 写法:
window.handleEvents( [&](const sf::Event::Closed&) { window.close(); }, [&](const sf::Event::Resized& e) { /* e.size */ });2) 加载纹理 / 精灵
Section titled “2) 加载纹理 / 精灵”const sf::Texture tex("assets/hero.png");sf::Sprite sprite(tex);sprite.setOrigin(sf::Vector2f(tex.getSize()) / 2.f);sprite.setPosition({640.f, 360.f});window.draw(sprite);const sf::Font font("assets/font.ttf");sf::Text hud(font, U"分数: 0", 24);hud.setFillColor(sf::Color::White);hud.setPosition({16.f, 16.f});window.draw(hud);4) 输入(事件 + 实时)
Section titled “4) 输入(事件 + 实时)”// 事件:按键瞬间// 实时:每帧状态(无视焦点——注意游戏设计)if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W)) player.move({0.f, -speed * dt.asSeconds()});const sf::Vector2i mouse = sf::Mouse::getPosition(window);5) 播放音效 / 音乐
Section titled “5) 播放音效 / 音乐”sf::SoundBuffer buf("assets/jump.wav");sf::Sound sfx(buf);sfx.play();
sf::Music bgm("assets/theme.ogg");bgm.setLooping(true);bgm.play();6) View(摄像机)
Section titled “6) View(摄像机)”sf::View camera(sf::FloatRect({0.f, 0.f}, {1280.f, 720.f}));camera.setCenter(player.getPosition());window.setView(camera);// UI 用默认 view:window.setView(window.getDefaultView());7) RenderTexture(离屏)
Section titled “7) RenderTexture(离屏)”sf::RenderTexture rt({512, 512});rt.clear();rt.draw(sprite);rt.display();sf::Sprite screen(rt.getTexture());window.draw(screen);