Как нарисовать границу прямоугольника в окне с изменяемым размером с помощью pygame?

#python #pygame #drawrect #window-resize #pygame-surface

#python #pygame #drawrect #окно-изменение размера #pygame-поверхность

Вопрос:

Я пытаюсь создать окно с изменяемым размером в pygame, в котором прямоугольник с границами должен находиться в фиксированной пропорции с окном.

 import pygame,sys 
pygame.init()

win = pygame.display.set_mode((400,400),pygame.HWSURFACE | pygame.DOUBLEBUF | pygame.RESIZABLE)

while True:
    events = pygame.event.get()
    for event in events:
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.VIDEORESIZE:
            pygame.display.set_mode((event.w,event.h),pygame.HWSURFACE | pygame.DOUBLEBUF | pygame.RESIZABLE)

    win_width,win_height = pygame.display.get_surface().get_size()
    surf = pygame.Surface((round(win_width/2),round(win_height/2)))
    surf.fill((255,255,255))
    win.blit(surf,(win_width/4,win_height/4))
    pygame.draw.rect(surf,(255,0,0),(0,0,surf.get_width(),surf.get_height()),10)
    pygame.display.update()

  

Заранее спасибо!

Комментарии:

1. Кажется, ваш код уже рисует прямоугольник в зависимости от размера окна… Итак, в чем именно ваша проблема?

2. При запуске этого кода я просто получаю белый прямоугольник на экране. В то время как я намереваюсь нарисовать красную границу на прямоугольнике с помощью этого оператора. pygame.draw.rect(surf,(255,0,0),(0,0,surf.get_width(),surf.get_height()),10)

Ответ №1:

Вы рисуете прямоугольник на белой поверхности ( surf ). Следовательно, вы должны нарисовать его surf , прежде чем запускать surf win :

 while True:
    # [...]

    surf.fill((255,255,255))
    
    pygame.draw.rect(surf,(255,0,0),(0,0,surf.get_width(),surf.get_height()),10)
    win.blit(surf,(win_width/4,win_height/4))
    
    pygame.display.update()   
  

Кроме того, вы можете нарисовать прямоугольник непосредственно на win :

 while True:
    # [...]

    surf.fill((255,255,255))
    rect = win.blit(surf,(win_width/4,win_height/4))
    pygame.draw.rect(win, (255,0,0), rect, 10)
    pygame.display.update()