You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL2中SDL_Rect无法屏幕居中的问题排查及自动居中方案咨询

SDL2中SDL_Rect无法屏幕居中的问题排查及自动居中方案咨询

我现在在使用SDL2开发,写了一段代码想把一个矩形渲染在窗口的正中央——思路是取窗口宽高的一半来计算矩形的位置,但实际运行后并没有得到预期效果。

我的代码如下:

#include <iostream>
#include <SDL2/SDL.h>

const int WIDTH = 800, HEIGHT = 600;

int main (int argc, char *argv[]){
    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI);

    if (NULL == window){
        std::cout << "Could not create window. ERR_MSG: " << SDL_GetError() << std::endl;
        return 1;
    }

    // 核心渲染代码开始
    SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);
    SDL_RenderClear(renderer);

    SDL_Rect rect;
    rect.x = WIDTH/2;
    rect.y = HEIGHT/2;
    rect.w = 250;
    rect.h = 250;

    SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
    SDL_RenderDrawRect(renderer, &rect);
    SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);

    SDL_RenderPresent(renderer);
    // 核心渲染代码结束

    SDL_Event windowEvent;
    while (true){
        if (SDL_PollEvent( &windowEvent)){
            if (SDL_QUIT == windowEvent.type){
                break;
            }
        }
    }

    SDL_DestroyWindow(window);
    SDL_Quit();
    return EXIT_SUCCESS;
}

这段代码的逻辑是取窗口宽高的一半,以此为起点绘制一个250x250的矩形,本应该让矩形居中,但实际结果是:

如你所见,矩形并没有被正确定位在窗口中心。

我想请教大家几个问题:

  • 为什么当前的定位方式无法让矩形居中?
  • SDL有没有内置的函数可以自动让矩形居中?最好还能支持窗口被调整大小时,矩形自动重新居中?

我之前试过调整宽高的除数,还尝试过一个相关的解决方案,但要么达不到预期效果,要么直接编译报错了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 12:05:28