Divide render into renderWorld and renderUI

This commit is contained in:
2025-12-23 16:02:47 +08:00
parent c2fd549f49
commit e1245997ae
7 changed files with 35 additions and 11 deletions

View File

@@ -39,10 +39,13 @@ public:
* @brief 每帧更新 * @brief 每帧更新
*/ */
virtual void update() = 0; virtual void update() = 0;
virtual void renderWorld() = 0; // 逻辑世界
virtual void renderUI() = 0; // 屏幕 UI
/** /**
* @brief 每帧渲染 * @brief 每帧渲染
*/ */
virtual void render() = 0; //virtual void render() = 0;
/** /**
* @brief 处理点击事件 * @brief 处理点击事件
* @param x 点击位置的 X 坐标 * @param x 点击位置的 X 坐标

View File

@@ -162,8 +162,12 @@ void SceneManager::updateCurrent() {
} }
void SceneManager::renderCurrent() { void SceneManager::renderWorld() {
if (m_scene) m_scene->render(); if (m_scene) m_scene->renderWorld();
}
void SceneManager::renderUI() {
if (m_scene) m_scene->renderUI();
} }
std::pair<int, int> SceneManager::getWindowDimensions() const { std::pair<int, int> SceneManager::getWindowDimensions() const {

View File

@@ -107,10 +107,15 @@ public:
/** /**
* @brief 渲染当前场景 * @brief 渲染当前场景
* @details 调用当前场景的 render() 方法进行每帧渲染 * @details 调用当前场景的 renderWorld() 方法进行每帧渲染
*/ */
void renderCurrent(); void renderWorld();
/**
* @brief 渲染当前场景的 UI
* @details 调用当前场景的 renderUI() 方法进行 UI 渲染
*/
void renderUI();
/** /**
* @brief 处理场景事件的回调函数 * @brief 处理场景事件的回调函数
* @param event 场景事件对象 * @param event 场景事件对象

View File

@@ -32,7 +32,7 @@ void GameScene::update() {
} }
void GameScene::render() { void GameScene::renderWorld() {
m_boardRenderer->drawBackground(); m_boardRenderer->drawBackground();
m_boardRenderer->drawBoard(); m_boardRenderer->drawBoard();
@@ -40,8 +40,12 @@ void GameScene::render() {
m_boardRenderer->drawPiece(m_gameSession->getSelectedPiece()); m_boardRenderer->drawPiece(m_gameSession->getSelectedPiece());
m_boardRenderer->drawMovementRange(); m_boardRenderer->drawMovementRange();
m_boardRenderer->renderBlackOverlay(); m_boardRenderer->renderBlackOverlay();
m_uiRenderer->renderUI(m_gameUIManager->getUIRenderData());
}
void GameScene::renderUI() {
m_uiRenderer->renderUI(m_gameUIManager->getUIRenderData());
} }
void GameScene::handleClick(float screenX, float screenY) { void GameScene::handleClick(float screenX, float screenY) {

View File

@@ -14,7 +14,8 @@ public:
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer) override; void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer) override;
void update() override; void update() override;
void render() override; void renderWorld() override; // 逻辑世界
void renderUI() override; // 屏幕 UI
void handleClick(float screenX, float screenY) override; void handleClick(float screenX, float screenY) override;
void renderMousePosition(float x, float y) override; void renderMousePosition(float x, float y) override;

View File

@@ -30,12 +30,18 @@ void MainMenuScene::update() {
// 更新场景逻辑 // 更新场景逻辑
} }
void MainMenuScene::render() { void MainMenuScene::renderWorld() {
SDL_FRect test = {20, 20, 20, 20};
// 渲染场景内容 // 渲染场景内容
SDL_SetRenderDrawColor(m_renderer, 20, 20,20, 255);
SDL_RenderFillRect(m_renderer, &test);
}
void MainMenuScene::renderUI() {
const UIRenderData& uiRenderData = m_mainMenuUIManager->getUIRenderData(); const UIRenderData& uiRenderData = m_mainMenuUIManager->getUIRenderData();
m_uiRenderer->renderUI(uiRenderData); m_uiRenderer->renderUI(uiRenderData);
} }
void MainMenuScene::handleClick(float x, float y) { void MainMenuScene::handleClick(float x, float y) {

View File

@@ -11,7 +11,8 @@ public:
void onExit() override; void onExit() override;
void update() override; void update() override;
void render() override; void renderWorld() override; // 逻辑世界
void renderUI() override; // 屏幕 UI
void handleClick(float x, float y) override; void handleClick(float x, float y) override;
void renderMousePosition(float x, float y) override; void renderMousePosition(float x, float y) override;