跳转到内容

常见任务速查

面向日常引擎任务的最短可运行片段。类型与签名细节见各模块页。

#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 */ }
);
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);
// 事件:按键瞬间
// 实时:每帧状态(无视焦点——注意游戏设计)
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
player.move({0.f, -speed * dt.asSeconds()});
const sf::Vector2i mouse = sf::Mouse::getPosition(window);
sf::SoundBuffer buf("assets/jump.wav");
sf::Sound sfx(buf);
sfx.play();
sf::Music bgm("assets/theme.ogg");
bgm.setLooping(true);
bgm.play();
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());
sf::RenderTexture rt({512, 512});
rt.clear();
rt.draw(sprite);
rt.display();
sf::Sprite screen(rt.getTexture());
window.draw(screen);