Pygame FULLSCREEN Display Flag crea una pantalla de juego que es demasiado grande para la pantalla

NÚMERO ACTUALIZADO

He descubierto que el problema parece estar en el hecho de que estoy usando el indicador de visualización FULLSCREEN para crear la ventana. Agregué un rectángulo para dibujar en la parte superior izquierda de la pantalla (0, 0), pero cuando ejecuto el progtwig, está casi completamente fuera de la pantalla. Luego, cuando presiono Alt-Tab para alejar y volver, el rectángulo se coloca apropiadamente en 0,0 y la torreta está descentrada.

Básicamente, cuando se inicia el progtwig, la pantalla del juego es más grande que mi pantalla real, pero centrada. Luego, después de Alt-Tab, la pantalla del juego está alineada con 0,0, pero como la pantalla del juego es más grande que la mía, la torreta se ve descentrada, pero en realidad está centrada en relación con el juego.

Entonces, la verdadera pregunta es ¿por qué el uso del indicador de pantalla FULLSCREEN hace que la pantalla sea más grande que la pantalla de mi computadora?

PROBLEMA ORIGINAL

Estoy construyendo una simple demostración de una torreta en el centro de la pantalla que sigue la ubicación del cursor como para disparar donde está. Todo funciona perfectamente hasta que Alt-Tab lejos de la pantalla, y luego Alt-Tab atrás. En este punto, la torreta ahora está fuera del centro (abajo y hacia la derecha)

 import pygame, math pygame.init() image_library = {} screen_dimen = pygame.display.Info() print("Screen Dimensions ", screen_dimen) def get_image(name): if name not in image_library: image = pygame.image.load(name) image_library[name] = image else: image = image_library[name] return image robot_turret_image = get_image('robot_turret.png') screen = pygame.display.set_mode((0, 0), pygame.`FULLSCREEN`) done = False clock = pygame.time.Clock() while not done: for event in pygame.event.get(): if event.type == pygame.QUIT: done = True if event.type == pygame.MOUSEMOTION: print(event.pos) if event.type == pygame.KEYDOWN and event.key == pygame.K_SPACE: done = True screen.fill((0, 0, 0)) pos = pygame.mouse.get_pos() angle = 360 - math.atan2(pos[1] - (screen_dimen.current_h / 2), pos[0] - (screen_dimen.current_w / 2)) * 180 / math.pi rot_image = pygame.transform.rotate(robot_turret_image, angle) rect = rot_image.get_rect(center=(screen_dimen.current_w / 2, screen_dimen.current_h / 2)) screen.blit(rot_image, rect) color = (0, 128, 255) pygame.draw.rect(screen, color, pygame.Rect(0, 0, 200, 200)) pygame.display.update() clock.tick(60) 

Parece que el centro está ahora apagado. He impreso las dimensiones de la pantalla antes y después de Alt-Tab y son las mismas, así que no puedo entender por qué se mueve la imagen. Creo que me estoy perdiendo algo con respecto a los cambios de estado con Pygame, pero no puedo averiguar qué. Si es relevante, estoy en Windows 10.

Bien, descubrí una solución de gamedev.stackexchange

Y lo re-hash aquí. El problema era que el uso de la etiqueta de pantalla completa hacía una pantalla más grande que la pantalla de mi computadora. El siguiente código resuelve esto

 import ctypes ctypes.windll.user32.SetProcessDPIAware() true_res = (ctypes.windll.user32.GetSystemMetrics(0), ctypes.windll.user32.GetSystemMetrics(1)) pygame.display.set_mode(true_res,pygame.FULLSCREEN) 

Es importante tener en cuenta que esto es potencialmente solo una solución de Windows, pero no tengo otro sistema con el cual probarlo. Pero funciona en Windows 10 con python 3.5.1 y pygame 1.9.2a0