Pygame display.info给出错误的分辨率大小

时间:2014-12-11 11:07:52

标签: python pygame

我正在用pygame构建一个小游戏。我希望游戏的窗口大小是显示器分辨率的大小。我的计算机屏幕的分辨率是1920x1080,display.info说窗口大小也是1920x1080,但是当我运行它时,它会创建一个大约是屏幕大小一半的窗口。

import pygame, sys

def main():
    #set up pygame, main clock
    pygame.init()
    clock = pygame.time.Clock()

    #creates an object with the computers display information
    #current_h, current_w gives the monitors height and width
    displayInfo = pygame.display.Info()

    #set up the window
    windowWidth = displayInfo.current_w
    windowHeight = displayInfo.current_h
    window = pygame.display.set_mode ((windowWidth, windowHeight), 0, 32)
    pygame.display.set_caption('game')

    #gameLoop
    while True:
        window.fill((0,0,0))
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        #draw the window onto the screen
        pygame.display.flip()
        clock.tick(60)

main()

1 个答案:

答案 0 :(得分:4)

我遇到了同样的问题,我找到了答案并发布了here。我找到的答案如下:

我设法在Pygame BitBucket页面上找到了一个提交,解释了这个问题并给出了一个如何解决它的例子。

正在发生的事情是,某些显示环境可以配置为拉伸窗口,以便它们在高PPI(每英寸像素数)显示器上看起来不小。这种拉伸是导致较大分辨率的显示显示大于实际值的原因。

他们在我链接的页面上提供了示例代码,以展示如何解决此问题。

他们通过导入ctypes并调用它来解决问题:

ctypes.windll.user32.SetProcessDPIAware()

他们还表示这是一个仅限Windows的解决方案,并且自Python 2.4以来在基础Python中可用。在此之前,它需要安装。

话虽如此,为了使这项工作,将这段代码放在pygame.display.set_mode()之前的任何地方

import ctypes
ctypes.windll.user32.SetProcessDPIAware()
#
# # # Anywhere Before
#
pygame.display.set_mode(resolution)

我希望这可以帮助您和其他发现他们遇到同样问题的人。