gpt4 book ai didi

c++ - 在 SDL2 中,游戏显示在屏幕的左下角

转载 作者:行者123 更新时间:2023-12-01 15:13:40 27 4
gpt4 key购买 nike

我最近更新了我的 Mac,正常运行的代码停止运行。当我现在运行我的程序(游戏)时,窗口仍然具有正确的尺寸,但元素显示在屏幕的左下角。

what I see

我不明白它是从哪里来的。

这是我在示例中使用的 .cpp:

#include "../../include/game.h"

int main(int argc, char **argv)
{
SDL_Window *window;
SDL_Renderer *render;
int w;
int h;

(void)argc;
(void)argv;

SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER);
window = SDL_CreateWindow("lul", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WINDOW_W, WINDOW_H, 0);
render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
SDL_GetWindowSize(window, &w, &h);

SDL_Surface *surface;
SDL_Texture *texture;

surface = IMG_Load("FondHome2.jpg");
texture = SDL_CreateTextureFromSurface(render, surface);

SDL_Event event;
bool close_requested = false;

while (!close_requested)
{
while (SDL_PollEvent(&event))
{
if (event.type == SDL_QUIT)
{
close_requested = true;
}
}
SDL_RenderCopy(render, texture, NULL, NULL);
SDL_RenderPresent(render);
}

return(0);
}

这是使用的 .h:

#ifndef GAME_H
# define GAME_H

# include <SDL2/SDL.h>
# include <SDL2/SDL_timer.h>
# include <SDL2/SDL_image.h>
# include <SDL2/SDL_ttf.h>

# include <fstream>
# include <iostream>
# include <string>
# include <vector>
# include <stdarg.h>
# include <math.h>

# define WINDOW_W 400
# define WINDOW_H 300

#endif

最佳答案

查看与在 Mac 上使用 Retina 显示屏时的高 DPI 差异相关的内容:SDL_GL_GetDrawableSize 。将 SDL_WINDOW_ALLOW_HIGHDPI 标志传递给 SDL_CreateWindow,SDL_Render API 应该执行正确的操作。

问题是,如果没有启用高 DPI,SDL_Window 的实际宽度和高度对应的像素比传递给 SDL_CreateWindow 的像素多(2X 宽度和高度,以这个案例)。看起来SDL_RenderCopy仍然认为目标帧缓冲区是400x300,当DPI缩放因子为1时这是正确的。绘制图像时,仅覆盖了1/4的物理空间。

在不阅读 SDL2 源代码的情况下,我无法准确告诉您缩放问题发生在哪里,因为它可能发生在内部帧缓冲区或最终 blit 期间,但问题是假设 DPI 缩放因子为 1。在窗口创建期间传递 SDL_WINDOW_ALLOW_HIGHDPI 标志会告知 SDL 查询要使用的实际显示器 DPI。

相关问题:SDL 2.0 retina mac

关于c++ - 在 SDL2 中,游戏显示在屏幕的左下角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634622/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com