From c0d67926c47b1eea7fc95f1517db015a8d577961 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sat, 6 Dec 2025 10:25:14 +0800 Subject: [PATCH] Add Scene Base Class --- src/scenes/base/Scene.h | 20 ++++++++++++++++++++ src/scenes/base/SceneManager.cpp | 11 +++++++++++ src/scenes/base/SceneManager.h | 22 ++++++++++++++++++++++ 3 files changed, 53 insertions(+) create mode 100644 src/scenes/base/Scene.h create mode 100644 src/scenes/base/SceneManager.cpp create mode 100644 src/scenes/base/SceneManager.h diff --git a/src/scenes/base/Scene.h b/src/scenes/base/Scene.h new file mode 100644 index 0000000..e08dc84 --- /dev/null +++ b/src/scenes/base/Scene.h @@ -0,0 +1,20 @@ +// ui/Scene.h - 场景基类 +#pragma once +#include + + + + +class Scene { +public: + virtual ~Scene() = default; + + // 空实现,可选择性重写 + virtual void onEnter(){}; + virtual void onExit(){}; + + virtual void update() = 0; + virtual void render(SDL_Renderer* renderer) = 0; + +}; + diff --git a/src/scenes/base/SceneManager.cpp b/src/scenes/base/SceneManager.cpp new file mode 100644 index 0000000..9d33ebe --- /dev/null +++ b/src/scenes/base/SceneManager.cpp @@ -0,0 +1,11 @@ +#include "SceneManager.h" + +SceneManager::SceneManager() { + +} + +SceneManager::~SceneManager() { + while (!m_scenes.empty()) { + m_scenes.pop(); + } +} \ No newline at end of file diff --git a/src/scenes/base/SceneManager.h b/src/scenes/base/SceneManager.h new file mode 100644 index 0000000..03e42e9 --- /dev/null +++ b/src/scenes/base/SceneManager.h @@ -0,0 +1,22 @@ +#pragma once +#include "Scene.h" +#include +#include +#include +#include +class SceneManager { +public: + SceneManager(); + ~SceneManager(); + + void PushScene(const std::string& sceneName, std::unique_ptr scene); + void PopScene(); + void ChangeScene(const std::string& sceneName, std::unique_ptr scene); + + + +private: + // 用栈的形式来存储场景 + std::stack> m_scenes; + std::unordered_map> m_sceneCache; +}; \ No newline at end of file