首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mac显示扩展帐户(任何语言)

mac显示扩展帐户(任何语言)
EN

Stack Overflow用户
提问于 2022-09-30 18:14:17
回答 1查看 83关注 0票数 0

我几乎一辈子都是windows用户,每当我在任何图形应用程序上定义窗口大小时(游戏、jframes、glfw等等)该窗口将以像素为单位显示该大小。

然而,自从迁移到macOS之后,我注意到情况并非如此,背景中也出现了某种缩放现象,我想知道如何扭转这种情况,这样我就可以得到预期的屏幕大小。这里有一些例子。

这是一个游戏窗口,其大小被定义为1920x1080。我的笔记本电脑显示器分辨率为2560x1600,所以1080 p的窗口应该很容易安装,但它不能。

当然,我可以缩小窗口的大小--这是我倾向于做的事情,直到我成为图形的openGL,特别是gl_FragCoord函数,它才会产生这样的结果(在windows机器上,形状是完全中心的,大小也是正确的)。

我通常只是用尝试和错误硬编码一些值来解释这种扩展,但是有什么方法可以永久地为所有程序修复这个问题吗?

很抱歉有这么长的问题,并提前感谢您的回答!

(编辑)同时,im更倾向于寻找一种编程方式来解释这种扩展,而不是使用像switchresx这样的软件在本地res上强制显示,因为这使得mac几乎无法使用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-30 20:15:23

你试过:

W, H =pygame.display.get_desktop_sizes()

虽然您的屏幕可能名义分辨率为2560x1600像素,但程序可能无法识别该分辨率。我将验证所传递的像素坐标是否与程序识别的坐标相关。

所以假设对于W,你得到了一个值,而不是2560,那么你就知道了缩放因子,并且可以相应地调整。

我有一种感觉,这与Retina显示器本身而不是操作系统有关。我猜想,在Retina显示器中,你有了我所指的‘子像素’。因此,对于您的程序标识的每个像素,您的程序有几个“子像素”,它们加起来的名义分辨率为2560×1600,而游戏只“看到”,让我们说1680x1050像素块,每个块包含'x‘Retina显示’子像素‘。

如果获取桌面大小返回您的标称显示值,请尝试使用以下代码实际测量显示大小:

代码语言:javascript
复制
import pygame as pg

MAIN = pg.display.set_mode((0, 0), pg.FULLSCREEN)


def GameUI(hrange, wrange):

    for h in range(hrange):

        if h % 10 != 0:
            pg.draw.rect(MAIN,(255, 255, 255), (5,h,1,1))
        elif h % 100 == 0:
            pg.draw.rect(MAIN, (255, 255, 255), (5, h, 20, 1))  # draws long tick at intervals of 100
        elif h % 10 == 0:
            pg.draw.rect(MAIN, (255, 255, 255), (5, h, 10, 1))  # draws long tick at intervals of 10


    for w in range(wrange):

        if w % 10 != 0:
            pg.draw.rect(MAIN,(255, 255, 255), (w, 5, 1, 1))
        elif w % 100 == 0:
            pg.draw.rect(MAIN, (255, 255, 255), (w, 5, 1, 20))  # draws long tick at intervals of 100
        elif w % 10 == 0:
            pg.draw.rect(MAIN, (255, 255, 255), (w, 5, 1, 10))  # draws long tick at intervals of 10

    pg.display.update()

def Main():

    run = True

    # pick some value larger than your resoultion
    hrange = 5000
    wrange = 5000

    while run:

        for event in pg.event.get():
            if event.type == pg.KEYDOWN:
                if event.key == pg.K_ESCAPE:
                    run = False

        GameUI(hrange, wrange)


if __name__ == "__main__":
    Main()

这应该是程序识别的像素分辨率,它至少会为你提供猜测。

这里还有几个解决办法是使用宽度=0、高度=0和pygame.FULLSCREEN来自动设置屏幕的大小:

MAIN = pygame.display.set_mode((0, 0), pg.FULLSCREEN)

理论上,您也可以使用pygame.display.get_window_size()来查看它是否与您的标称分辨率或所测量的分辨率相匹配。如果是后者,那么您可以很容易地进行比较:

W, H =pygame.display.get_desktop_sizes()pygame.display.get_window_size()

这是我在StackOverflow上的第一个回答,所以如果我不是完全正确的话,请友好地<3

编辑:

下面是一些可能有用的东西:How to find display scaling factor on retina/4k displays?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73912525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档