From 392fde06e90f1beb78cabb95349b8e448850f437 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sat, 6 Dec 2025 10:35:21 +0800 Subject: [PATCH] Separation of rendering and scene logic --- src/graphics/BoardRenderer.cpp | 47 +++------------------------------- src/graphics/BoardRenderer.h | 5 +--- 2 files changed, 5 insertions(+), 47 deletions(-) diff --git a/src/graphics/BoardRenderer.cpp b/src/graphics/BoardRenderer.cpp index 706842f..89395a2 100644 --- a/src/graphics/BoardRenderer.cpp +++ b/src/graphics/BoardRenderer.cpp @@ -1,4 +1,4 @@ -#include "Render.h" +#include "BoardRenderer.h" Renderer::Renderer(int WIDTH, int HEIGHT) : m_Width(WIDTH), m_Height(HEIGHT) { m_cellSize = HEIGHT / m_boardRow; @@ -7,65 +7,26 @@ Renderer::Renderer(int WIDTH, int HEIGHT) : m_Width(WIDTH), m_Height(HEIGHT) { Renderer::~Renderer() { - if (m_renderer) SDL_DestroyRenderer(m_renderer); - if (m_window) SDL_DestroyWindow(m_window); + } bool Renderer::initialize() { - // 创建窗口(支持高DPI和横屏)[3,4](@ref) - m_window = SDL_CreateWindow( - "孢子棋", // 窗口标题,显示在标题栏上 - m_Width, // 窗口的逻辑宽度(例如 800),用于统一布局,不受屏幕 DPI 影响 - m_Height, // 窗口的逻辑高度(例如 600) - SDL_WINDOW_HIGH_PIXEL_DENSITY | // 启用高像素密度支持(HiDPI/Retina),确保在高分屏上画面清晰 - SDL_WINDOW_RESIZABLE // 允许用户调整窗口大小(可拉伸) -); - if (!m_window) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "创建窗口失败: %s", SDL_GetError()); - return false; - } - // 创建渲染器 - m_renderer = SDL_CreateRenderer(m_window, nullptr); //自动选择合适渲染器,开启硬件加速和垂直同步 - if (!m_renderer) { - SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, - "创建渲染器失败: %s", SDL_GetError()); - return false; - } - - // 设置逻辑呈现模式,实现分辨率自适应[3](@ref) - SDL_SetRenderLogicalPresentation(m_renderer, - m_Width, - m_Height, - SDL_LOGICAL_PRESENTATION_LETTERBOX); - SDL_SetWindowSize(m_window, m_Width, m_Height); - return true; } void Renderer::render() { - clear(); + drawBoard(); - present(); + } -void Renderer::clear() { - // 设置画笔颜色 - SDL_SetRenderDrawColor(m_renderer, 255, 255, 255, 255); - // 使用画笔颜色填充整个屏幕 - SDL_RenderClear(m_renderer); -} - -void Renderer::present() { - SDL_RenderPresent(m_renderer); -} void Renderer::drawBoard() { auto area = getBoardArea(); diff --git a/src/graphics/BoardRenderer.h b/src/graphics/BoardRenderer.h index 2e44c89..dc886b6 100644 --- a/src/graphics/BoardRenderer.h +++ b/src/graphics/BoardRenderer.h @@ -19,10 +19,7 @@ public: // 渲染画面 void render(); bool initialize(); - // 清除上一帧的渲染 - void clear(); - // 展现画面 - void present(); +