gpt4 book ai didi

pygame - 使用 pygame 更改显示方向

转载 作者:行者123 更新时间:2023-12-05 06:58:39 27 4
gpt4 key购买 nike

import sys
import pygame
import pygame.locals as pgl


class Test:
def __init__(self):
pygame.init()
self.flags = pygame.FULLSCREEN | pygame.NOFRAME | pygame.VIDEORESIZE
self.surface = pygame.display.set_mode((0, 0), self.flags, 0, 0)
self.width, self.height = self.surface.get_size()
self.bgcolor = (255, 255, 255)
print(f'INIT => VIDEO SIZE: {self.width}, {self.height}')

def __del__(self):
pygame.display.quit()

def process_events(self):
for event in pygame.event.get():
self.handle_event(event)

def handle_event(self, event):
if event.type == pgl.KEYDOWN:
if event.key == pgl.K_ESCAPE:
self.running = False
pygame.quit()
sys.exit(0)
elif (event.type == pgl.VIDEORESIZE):
print(f'HANDLE EVENT => VIDEO RESIZE: {event.w}, {event.h}')
self.width, self.height = self.height, self.width
#self.surface = pygame.display.set_mode((self.width, self.height), self.flags, 0, 0)
self.surface = pygame.display.set_mode((0, 0), self.flags, 0, 0)
self.width, self.height = self.surface.get_size()
print(f'HANDLE EVENT => NEW SIZE: {self.width}, {self.height}')
self.orientation_changed()

def orientation_changed(self):
# do something here
pass

def draw(self):
r = pygame.Rect(0, 0, self.width, self.height)
pygame.draw.rect(self.surface, self.bgcolor, r)
pygame.display.update()

def run(self):
self.running = True

while self.running:

self.process_events()
self.draw()


test = Test()
test.run()

运行这段代码我有:

INIT => VIDEO SIZE: 1366, 768
HANDLE EVENT => VIDEO RESIZE: 768, 1332
HANDLE EVENT => NEW SIZE: 1366, 768
HANDLE EVENT => VIDEO RESIZE: 1366, 734
HANDLE EVENT => NEW SIZE: 1366, 768

这显示了错误尺寸的显示高度。

当我旋转设备时,白色背景不会覆盖所有屏幕尺寸。

现在,当我取消注释第 31 行和注释行 32 时,出现错误:

INIT => VIDEO SIZE: 1366, 768
HANDLE EVENT => VIDEO RESIZE: 768, 1332
Traceback (most recent call last):
File "/home/dev/test/python/test.py", line 56, in <module>
test.run()
File "/home/dev/test/python/test.py", line 51, in run
self.process_events()
File "/home/dev/test/python/test.py", line 20, in process_events
self.handle_event(event)
File "/home/dev/test/python/test.py", line 31, in handle_event
self.surface = pygame.display.set_mode((self.width, self.height), self.flags, 0, 0)
pygame.error: No video mode large enough for 768x1366

有人知道为什么显示器没有改变它的方向以及为什么创建另一个尺寸正确的显示器会出错。

感谢您的帮助。

最佳答案

我认为因为 pygame 已经初始化了一个窗口,所以它无法调整窗口的大小。

关于此的 pygame wiki:https://www.pygame.org/wiki/WindowResizing

在 Pygame 2 中在 pygame 2 中,当窗口为 set_mode() 时,显示表面会自动调整大小 - 不应调用 set_mode()。相反,VIDEORESIZE 事件让我们可以处理任何其他表面,或任何我们可能想要调整大小的东西。示例:

import pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((500, 500), RESIZABLE)
pic = pygame.image.load("example.png") # You need an example picture in the same folder as this file!
running = True
while running:
pygame.event.pump()
event = pygame.event.wait()
if event.type == QUIT:
running = False
elif event.type == VIDEORESIZE:
screen.blit(pygame.transform.scale(pic, event.dict['size']), (0, 0))
pygame.display.update()
elif event.type == VIDEOEXPOSE: # handles window minimising/maximising
screen.fill((0, 0, 0))
screen.blit(pygame.transform.scale(pic, screen.get_size()), (0, 0))
pygame.display.update()

所以我认为解决这个问题的唯一方法是关闭并重新打开窗口,或者使用不同的表面,这也无济于事。

或者如果我不明白你的问题或者我的回答是错误的:我认为你的代码中可能是这样的:

self.width, self.height = self.height, self.width

我想你希望它是:

self.width, self.height = event.w, event.h

关于pygame - 使用 pygame 更改显示方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64564646/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com