From 27801278a10b26eadd6f65878539196332762b64 Mon Sep 17 00:00:00 2001 From: zhenyan121 <3367366583@qq.com> Date: Sun, 21 Dec 2025 18:31:32 +0800 Subject: [PATCH] Change Fix the scale bug, and abandon using sfml and still use sdl3 --- src/core/WindowManager.cpp | 17 +++++++++++++++-- src/graphics/ui/UIRenderer.cpp | 9 +++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/core/WindowManager.cpp b/src/core/WindowManager.cpp index ed5b51c..3573c7c 100644 --- a/src/core/WindowManager.cpp +++ b/src/core/WindowManager.cpp @@ -18,7 +18,7 @@ bool WindowManager::Initialize(GameConfig& config) { "孢子棋", // 窗口标题,显示在标题栏上 m_logicalWidth, // 窗口的逻辑宽度(例如 800),用于统一布局,不受屏幕 DPI 影响 m_logicalHeight, // 窗口的逻辑高度(例如 600) - //SDL_WINDOW_HIGH_PIXEL_DENSITY | // 启用高像素密度支持(HiDPI/Retina),确保在高分屏上画面清晰 + SDL_WINDOW_HIGH_PIXEL_DENSITY | // 启用高像素密度支持(HiDPI/Retina),确保在高分屏上画面清晰 SDL_WINDOW_RESIZABLE // 允许用户调整窗口大小(可拉伸) ); if (!m_window) { @@ -54,7 +54,8 @@ bool WindowManager::Initialize(GameConfig& config) { m_logicalWidth, m_logicalHeight ); - + // 设置纹理缩放模式为最近邻 + SDL_SetTextureScaleMode(m_logicalTexture, SDL_SCALEMODE_NEAREST); return true; } @@ -74,6 +75,17 @@ void WindowManager::Clear() { } +/* +void WindowManager::Clear() { + + // 设置画笔颜色 + SDL_SetRenderDrawColor(m_renderer, 255, 255, 255, 255); // 白色背景 + // 使用画笔颜色填充整个逻辑画布 + SDL_RenderClear(m_renderer); + +} +*/ + void WindowManager::Present() { // 4. 切回默认渲染目标(窗口) @@ -90,6 +102,7 @@ void WindowManager::Present() { SDL_RenderPresent(m_renderer); } + SDL_Renderer* WindowManager::GetRenderer() { return m_renderer; } diff --git a/src/graphics/ui/UIRenderer.cpp b/src/graphics/ui/UIRenderer.cpp index de8de0b..f7ab7a0 100644 --- a/src/graphics/ui/UIRenderer.cpp +++ b/src/graphics/ui/UIRenderer.cpp @@ -71,10 +71,11 @@ void UIRenderer::renderButtonBackground(const ButtonData& buttonData) { SDL_SetRenderDrawColor(m_renderer, m_backgroundColor.r, m_backgroundColor.g, m_backgroundColor.b, m_backgroundColor.a); auto [width, height] = m_textRenderer->getTextSize(buttonData.text, buttonData.textstytle); // 绘制普通矩形 - SDL_FRect rect = { static_cast(m_rect.x), - static_cast(m_rect.y), - static_cast(width), - static_cast(height) }; + SDL_FRect rect = { static_cast(m_rect.x) + 0.375f, + static_cast(m_rect.y) + 0.375f, + static_cast(m_rect.w) - 0.75f, + static_cast(m_rect.h) - 0.75f }; + //SDL_SetRenderDrawBlendMode(m_renderer, SDL_BLENDMODE_NONE); SDL_RenderFillRect(m_renderer, &rect); }