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 每帧更新
*/
virtual void update() = 0;
virtual void renderWorld() = 0; // 逻辑世界
virtual void renderUI() = 0; // 屏幕 UI
/**
* @brief 每帧渲染
*/
virtual void render() = 0;
//virtual void render() = 0;
/**
* @brief 处理点击事件
* @param x 点击位置的 X 坐标

View File

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

View File

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

View File

@@ -32,7 +32,7 @@ void GameScene::update() {
}
void GameScene::render() {
void GameScene::renderWorld() {
m_boardRenderer->drawBackground();
m_boardRenderer->drawBoard();
@@ -40,8 +40,12 @@ void GameScene::render() {
m_boardRenderer->drawPiece(m_gameSession->getSelectedPiece());
m_boardRenderer->drawMovementRange();
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) {

View File

@@ -14,7 +14,8 @@ public:
void onEnter(SDL_Renderer* renderer, int WIDTH, int HEIGHT, UIRenderer* uiRenderer) override;
void update() override;
void render() override;
void renderWorld() override; // 逻辑世界
void renderUI() override; // 屏幕 UI
void handleClick(float screenX, float screenY) 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();
m_uiRenderer->renderUI(uiRenderData);
}
void MainMenuScene::handleClick(float x, float y) {

View File

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