Изменение размера поверхности Pygame

Когда я изменяю размер окна, границы поверхностей не меняются, как окна. Отрисовка текста на основной поверхности в начальных границах окна (600x340). Почему? Также визуализируйте изображения (я вырезал эту часть кода, чтобы упростить проблему) в качестве фона, и он обычно отображается в соответствии с границами нового окна (я перетаскиваю прямо на основную поверхность (победа)). Проблема, я думаю, в дополнительных поверхностях (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()

person RedSubmarine    schedule 16.01.2021    source источник
comment
Размер text_surf не меняется волшебным образом. Вам нужно создать новую Surface с новым размером.   -  person Rabbid76    schedule 17.01.2021


Ответы (1)


Размер text_surf и background не меняется волшебным образом. Вам нужно создать новую поверхность с новым размером.
Флаг pygame.RESIZABLE не влияет на _ 4_ (или эффект, которого вы не ожидаете).

pygame.Surface((screen_width,screen_height),pygame.RESIZABLE)

pygame.RESIZABLE предназначен только для использования с pygame.display.set_mode. Допустимые флаги для аргумента flag конструктора pygame.Surface: pygame.HWSURFACE и pygame.SRCALPHA.

Создайте новую поверхность с новым размером, когда произойдет событие pygame.VIDEORESIZE:

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))

    # [...]
person Rabbid76    schedule 16.01.2021
comment
Спасибо!!!!!! Теперь все работает, как я ожидал. Поэтому необходимо воссоздать все поверхности в основном цикле. И удалите pygame.RESIZABLE из строк создания перед основным циклом. - person RedSubmarine; 17.01.2021