Pygame全屏放大

问题描述

我不确定这是否是pygame的已知问题,但是当我使用全屏模式时,它似乎会放大。我的显示器分辨率为1920 x1080。让我向您展示一些代码以及从中获得的输出

import pygame,sys
from pygame.locals import *

pygame.init()
clock = pygame.time.Clock()

monitor_size = pygame.display.list_modes()[0]
print(monitor_size)
# Output: 1920x1080

FPS = 30
WINDOW_SIZE = (768,432) # Proportional to 1920x1080,so it doesn't stretch out
SCREEN_SIZE = WINDOW_SIZE
window = pygame.display.set_mode(WINDOW_SIZE)
pygame.display.set_caption('Project')
screen = pygame.Surface(SCREEN_SIZE)

full_screen = False

def display_corners(surface):
    pygame.draw.aaline(surface,(255,0),(SCREEN_SIZE[0] - 1,SCREEN_SIZE[1] - 1))
    pygame.draw.aaline(surface,(0,SCREEN_SIZE[1] - 1),0))
    pygame.draw.aaline(surface,SCREEN_SIZE[1] - 1))


while True:
    # Event Loop ------------------------------------------------- #
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        if event.type == KEYDOWN:
            if event.key == K_F5:
                full_screen = not full_screen
                if full_screen:
                    window_size_before = WINDOW_SIZE
                    WINDOW_SIZE = monitor_size
                    WINDOW = pygame.display.set_mode(WINDOW_SIZE,pygame.FULLSCREEN)
                
                else:
                    WINDOW_SIZE = window_size_before
                    WINDOW = pygame.display.set_mode(WINDOW_SIZE)

   
    # Rendering ------------------------------------------------- #
    screen.fill((10,10,10))
    display_corners(screen)
    
    if not full_screen:
        window.blit(pygame.transform.scale(screen,WINDOW_SIZE),0))
    else:
        window.blit(pygame.transform.scale(screen,(WINDOW_SIZE[0],WINDOW_SIZE[1])),0))
    # Update ---------------------------------------------------- #
    pygame.display.update()
    clock.tick(FPS)

所以我有一个非常基本的全屏功能。但是,当我将monitor_size变量设置为我的显示器大小时,我在全屏模式下看不到应该显示在屏幕两侧的红线。即使我使用的是确切的显示器尺寸。但是经过反复试验,我得到了理想的显示器尺寸,它是1600 x 900,它也使用相同的比例,所以这很有意义。我通过使用monitor_size = pygame.display.list_modes()[2]来获得的。但是,对于1920x1080(或pygame.display.list_modes()[0])分辨率不是最佳尺寸的原因,这对我来说并没有意义,我觉得我无法通过使用1600 x 900来充分利用屏幕的全部潜力。 / p>

解决方法

您是否考虑过使用从RESIZABLE导入的pygame.locals进行测试

screen = pygame.display.set_mode(WINDOW_SIZE,RESIZABLE)
,

尝试进行设置,让用户可以手动选择屏幕尺寸,因为许多显示器彼此不同。