问题描述
我不确定这是否是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)
,
尝试进行设置,让用户可以手动选择屏幕尺寸,因为许多显示器彼此不同。