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
相关产品推荐
相关产品推荐

