强制display.list_modes()中未包含的全屏分辨率

时间:2017-06-05 21:26:33

标签: python pygame

我正在为学校进行模拟,我试图让pygame在我的原生分辨率中创建一个全屏显示。但是,我有一个QHD屏幕(2560x1440),它没有正常工作。据我所知,pygame正在以正确的分辨率渲染一个屏幕,但扩展它以使其缩放,就好像它是1080p一样,所以在边缘周围切掉大约300-400个像素。例如,这导致在(200,200)处渲染的圆完全不可见。经过一些研究,我了解到这是因为pygame没有正式支持我的解决方案(它没有在pygame.display.list_modes()中列出)。有没有办法强制它起作用?如果我可以使用我的实际分辨率而不是升级的1080p,我更愿意。

以下是初始化窗口的代码:

import pygame
from pygame.locals import *
pygame.init()
w = pygame.display.Info().current_w
h = pygame.display.Info().current_h
S = pygame.display.set_mode((w,h), pygame.FULLSCREEN)

1 个答案:

答案 0 :(得分:0)

如果您使用的是Windows,请确保在显示设置中将缩放比例设置为100%。这将使你的文本和所有内容变小,如果你当前没有它,但我认为Pygame窗口由于某种原因受到这个数字的影响。

请参阅以下代码段,以确保您的窗口正确缩放。另请参阅here

import pygame
from ctypes import windll

def run():
    # Force windows to ignore the display scaling value.
    windll.user32.SetProcessDPIAware()

    pygame.display.init()

    # Make the screen the highest resolution that will fit the screen at 100% scaling.
    screen = pygame.display.set_mode(pygame.display.list_modes()[0])

    done = False
    while not done:
        for event in pygame.event.get():
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    done = True

        pygame.display.flip()

    pygame.quit()

if __name__ == "__main__":
    run()