Python 皮加梅。如何调整曲面大小并使所有对象与新窗口大小成比例?
如果我将pygame窗口设置为可调整大小,然后在窗口的边框上单击并拖动,窗口将变大,但表面上的blit不会随之变大。(这是可以理解的)当我调整窗口大小时,如何使所有blit对象都能随之调整大小并正确填充窗口 例如:假设我有一个200 x 200的窗口,我在窗口宽度/2和窗口高度/2处单击一个按钮。该按钮将位于窗口中心的100 x 100处。现在,如果我将窗口调整为300 x 300,按钮将保持在100 x 100,而不是150 x 150 我试着和pygame.Surface.get_width等混在一起,但运气不好。Python 皮加梅。如何调整曲面大小并使所有对象与新窗口大小成比例?,python,pygame,resizable,surface,blit,Python,Pygame,Resizable,Surface,Blit,如果我将pygame窗口设置为可调整大小,然后在窗口的边框上单击并拖动,窗口将变大,但表面上的blit不会随之变大。(这是可以理解的)当我调整窗口大小时,如何使所有blit对象都能随之调整大小并正确填充窗口 例如:假设我有一个200 x 200的窗口,我在窗口宽度/2和窗口高度/2处单击一个按钮。该按钮将位于窗口中心的100 x 100处。现在,如果我将窗口调整为300 x 300,按钮将保持在100 x 100,而不是150 x 150 我试着和pygame.Surface.get_width
基本上,我试图调整程序窗口的大小,使所有blit图像保持比例。不要直接在屏幕上绘制,而是在另一个表面上绘制。然后将另一个表面缩放到屏幕的大小,并在屏幕上闪烁 下面是一个简单的例子:
import pygame
from pygame.locals import *
def main():
pygame.init()
screen = pygame.display.set_mode((200, 200),HWSURFACE|DOUBLEBUF|RESIZABLE)
fake_screen = screen.copy()
pic = pygame.surface.Surface((50, 50))
pic.fill((255, 100, 200))
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.display.quit()
elif event.type == VIDEORESIZE:
screen = pygame.display.set_mode(event.size, HWSURFACE|DOUBLEBUF|RESIZABLE)
fake_screen.fill('black')
fake_screen.blit(pic, (100, 100))
screen.blit(pygame.transform.scale(fake_screen, screen.get_rect().size), (0, 0))
pygame.display.flip()
main()
因此,在没有gui初始化(pygame init和setmode comands)的情况下,您可以使用现有的pygame event get()(这是您只允许使用的一次(或者只是在pygame.event.get(VIDEORESIZE)中输入“for inkey:”( (注意,在pygame.event.get(VIDEORESIZE)中,每个循环只能对inkey使用一次“for inkey:”,因为它实际上是一个堆栈,在读取事件列表时会取消堆栈,因此您应该在pygame.event.get()中对inkey使用“”:''在pygame.event.get()中出现''for inkey:''之后,snd将您的所有密钥识别语句都放在''之后:'':
最近,在pygame2.0中,您可以使用缩放标志您可以提供有关标志传递方式的更多信息吗?除了您的答案之外,还可以提供指向该标志相关文档的链接来实现这一点?
for inkey in pygame.event.get(VIDEORESIZE)
if inkey.type == pygame.VIDEORESIZE:
winwidth,winhight = inkey.size # or event.w, event.h
Window1copy = Window1.copy()# make copy of existing window
Window1=pygame.display.set_mode((winwidth,winhight),pygame.RESIZABLE)
Window1.blit(Window1copy, (0, 0))
pygame.display.update()