Pygame 表面调整大小
Pygame surface resize
当我调整 window 大小时,表面边界不会像 window 那样调整大小。在起始 window 边界 (600x340) 的主表面呈现文本。为什么?还有一个渲染图像(我剪切了这个代码部分以简化问题)作为背景,它根据新的 window 的边界正常渲染(我直接 blit 到主表面(win))。所以我认为问题在于其他表面(text_surf)。为什么它们不能调整大小?
import pygame
import time
pygame.init()
run=True
screen_width=600
screen_height=340
black=(0,0,0)
white=(255,255,255)
font1=pygame.font.SysFont("arial",45)
text_press=font1.render("press any key to play!",0,(100,0,0))
win=pygame.display.set_mode((screen_width,screen_height),pygame.RESIZABLE)
text_surf=pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
background=pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
while run==True:
pygame.time.delay(16)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run=False
if event.type == pygame.VIDEORESIZE:
surface = pygame.display.set_mode((event.w, event.h),pygame.RESIZABLE)
screen_width=event.w
screen_height=event.h
win.fill((white))
background.fill((120,120,100))
win.blit(background,(0,0))
text_surf.fill((black))
text_surf.blit(text_press, (screen_width*0.5-50,screen_height*0.5+100))
text_surf.set_colorkey(black)
text_surf.set_alpha(150)
win.blit(text_surf,(0,0))
pygame.display.update()
pygame.quit()
text_surf
和 background
的大小不会神奇地改变。您需要创建一个新尺寸的新表面..
pygame.RESIZABLE
标志对 pygame.Surface
没有影响(或者它有你意想不到的影响)。
pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
pygame.RESIZABLE
仅适用于 pygame.display.set_mode
。 pygame.Surface
构造函数的标志参数的有效标志是 pygame.HWSURFACE
和 pygame.SRCALPHA
.
在 pygame.VIDEORESIZE
事件发生时创建具有新尺寸的新 Surfaces:
while run==True:
# [...]
for event in pygame.event.get():
if event.type == pygame.QUIT:
run=False
if event.type == pygame.VIDEORESIZE:
surface = pygame.display.set_mode((event.w, event.h),pygame.RESIZABLE)
screen_width = event.w
screen_height = event.h
text_surf = pygame.Surface((screen_width,screen_height))
background = pygame.Surface((screen_width,screen_height))
# [...]
当我调整 window 大小时,表面边界不会像 window 那样调整大小。在起始 window 边界 (600x340) 的主表面呈现文本。为什么?还有一个渲染图像(我剪切了这个代码部分以简化问题)作为背景,它根据新的 window 的边界正常渲染(我直接 blit 到主表面(win))。所以我认为问题在于其他表面(text_surf)。为什么它们不能调整大小?
import pygame
import time
pygame.init()
run=True
screen_width=600
screen_height=340
black=(0,0,0)
white=(255,255,255)
font1=pygame.font.SysFont("arial",45)
text_press=font1.render("press any key to play!",0,(100,0,0))
win=pygame.display.set_mode((screen_width,screen_height),pygame.RESIZABLE)
text_surf=pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
background=pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
while run==True:
pygame.time.delay(16)
for event in pygame.event.get():
if event.type == pygame.QUIT:
run=False
if event.type == pygame.VIDEORESIZE:
surface = pygame.display.set_mode((event.w, event.h),pygame.RESIZABLE)
screen_width=event.w
screen_height=event.h
win.fill((white))
background.fill((120,120,100))
win.blit(background,(0,0))
text_surf.fill((black))
text_surf.blit(text_press, (screen_width*0.5-50,screen_height*0.5+100))
text_surf.set_colorkey(black)
text_surf.set_alpha(150)
win.blit(text_surf,(0,0))
pygame.display.update()
pygame.quit()
text_surf
和 background
的大小不会神奇地改变。您需要创建一个新尺寸的新表面..
pygame.RESIZABLE
标志对 pygame.Surface
没有影响(或者它有你意想不到的影响)。
pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)
pygame.RESIZABLE
仅适用于 pygame.display.set_mode
。 pygame.Surface
构造函数的标志参数的有效标志是 pygame.HWSURFACE
和 pygame.SRCALPHA
.
在 pygame.VIDEORESIZE
事件发生时创建具有新尺寸的新 Surfaces:
while run==True:
# [...]
for event in pygame.event.get():
if event.type == pygame.QUIT:
run=False
if event.type == pygame.VIDEORESIZE:
surface = pygame.display.set_mode((event.w, event.h),pygame.RESIZABLE)
screen_width = event.w
screen_height = event.h
text_surf = pygame.Surface((screen_width,screen_height))
background = pygame.Surface((screen_width,screen_height))
# [...]