微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

全屏运行不一致

如何解决全屏运行不一致

我的目标是创建一个可以调整自身大小并进入全屏模式的窗口。调整大小工作正常,但是当我进入全屏时,它看起来像这样:

enter image description here

蓝色方块应该居中,白色也是如此。我已经找到了这个原因,但我不确定它为什么会发生或如何解决它。如果 screen 的高度小于 window 的高度,会导致这种情况。那么,我将如何做到这一点,当我进入全屏模式时,背景和蓝色方块会在我的屏幕上居中?

import pygame
import sys
from pygame.locals import *
from math import floor

# Initialize ------------------------------------------------------------------------------------- #
pygame.init()
FPS = 60
clock = pygame.time.Clock()
SCREEN_SIZE = [800,450]
SCREEN_RATIO = SCREEN_SIZE[0]/SCREEN_SIZE[1]
window_size = [800,450]
screen = pygame.Surface(SCREEN_SIZE)
window = pygame.display.set_mode(window_size,RESIZABLE)
pygame.display.set_caption('Project')

monitor_size = pygame.display.list_modes()[0]
print(monitor_size)

def display_edges(surface,color=(255,0)):
    pygame.draw.aaline(surface,color,(window_size[0] - 1,0),window_size[1] - 1))
    pygame.draw.aaline(surface,(0,window_size[1] - 1),0))
    pygame.draw.aaline(surface,window_size[1] - 1))

full_screen = False

# Game loop -------------------------------------------------------------------------------------- #
running = True
while running:

    # Event loop --------------------------------------------------------------------------------- #
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
            
        elif event.type == VIDEORESIZE:
            window_size = (event.w,event.h)
            window = pygame.display.set_mode(window_size,RESIZABLE)

        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,FULLSCREEN)
                    screen = pygame.transform.scale(screen,window_size)
                else:
                    window_size = window_size_before
                    window = pygame.display.set_mode(window_size,RESIZABLE)
                    screen = pygame.Surface(SCREEN_SIZE)

    # Render ------------------------------------------------------------------------------------- #
    screen.fill((240,240,240))
    pygame.draw.rect(screen,100,200),(SCREEN_SIZE[0]/2-25,SCREEN_SIZE[1]/2-25,50,50))
    
    if window_size[0]/window_size[1] > SCREEN_SIZE[0]/SCREEN_SIZE[1]:
        SCREEN_SIZE[1] = window_size[1]
        SCREEN_SIZE[0] = floor(window_size[1]*SCREEN_RATIO)
        screen = pygame.transform.scale(screen,SCREEN_SIZE)

    elif window_size[0]/window_size[1] < SCREEN_SIZE[0]/SCREEN_SIZE[1]:
        SCREEN_SIZE[0] = window_size[0]
        SCREEN_SIZE[1] = floor(window_size[0]/SCREEN_RATIO)
        screen = pygame.transform.scale(screen,SCREEN_SIZE)
   
    window.blit(screen,(window_size[0]/2 - SCREEN_SIZE[0]/2,window_size[1]/2 - SCREEN_SIZE[1]/2))
    display_edges(window)
    
    # Update ------------------------------------------------------------------------------------- #
    pygame.display.update()
    clock.tick(FPS)
    

pygame.quit()
sys.exit()


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。