всякий раз, когда я пытаюсь заполнить прямую кишку прозрачной переменной (чтобы удалить ее с экрана), одна из прямых кишок становится коричневой

#python #pygame

Вопрос:

Я пытался создать конечный экран, и всякий раз, когда я заполняю шар прозрачной переменной, которую я сделал, галс исчезает (как и должно быть), но шар превращается в коричневый квадрат. или я делаю что-то еще не так? есть ли обходной путь? Есть ли способ, которым я могу просто удалить два ректа, а не текст? введите описание изображения здесь

 import pygame, sys, math, random



pygame.init()



size = width, height = 800, 600
white = 255, 255, 255
red = 255, 0, 0
black = 0, 0, 0
transparent = 0, 0, 0, 0
clock = pygame.time.Clock()

screen = pygame.display.set_mode(size)

character = pygame.image.load("intro_ball.gif")
charrect = character.get_rect(topleft = (340, 480))
enemy = pygame.image.load("ho.png")
enrect = enemy.get_rect(topleft = (random.randint(0, 690), 0))
lose = False
run = True
font = pygame.font.SysFont(None, 25)
losemsg = font.render("You Lose", True, black)
msgrect = losemsg.get_rect(topleft = (340, 240))


while lose != True:
    clock.tick(60)
    for event in pygame.event.get():
        if event.type == pygame.QUIT: 
            pygame.quit()
            quit()

    keys = pygame.key.get_pressed()
    charrect.x  = (keys[pygame.K_RIGHT] - keys[pygame.K_LEFT]) * 4
    charrect.clamp_ip(screen.get_rect())

    
    if enrect.y >= 600 and lose != True:
        enrect.y = 0
        enrect.x = random.randint(0, 690)

    collide = pygame.Rect.colliderect(charrect, enrect)




    if collide:
        lose = True
    else: lose = False





    enrect.y  = 6
    screen.fill(white)
    screen.blit(enemy, enrect)
    screen.blit(character, charrect)
    pygame.display.update()

while lose == True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: lose = False
    character.fill(transparent)
    enemy.fill(transparent)
    screen.fill(red)

    screen.blit(losemsg, msgrect)
    screen.blit(enemy, enrect)
    screen.blit(character, charrect)
    pygame.display.update()


pygame.quit()
quit()
 

Ответ №1:

character У него нет альфа-канала. Используется pygame.Surface.convert_alpha() для изменения формата пикселей, включая буквы на пиксель:

character = pygame.image.load("intro_ball.gif")

 character = pygame.image.load("intro_ball.gif").convert_alpha()
 

Однако, если вы хотите сделать объект «невидимым», просто не рисуйте его:

 while lose == True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT: lose = False
    #character.fill(transparent)       <--- DELETE
    #enemy.fill(transparent)           <--- DELETE
    screen.fill(red)

    screen.blit(losemsg, msgrect)
    # screen.blit(enemy, enrect)       <--- DELETE
    # screen.blit(character, charrect) <--- DELETE
    pygame.display.update()
 

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

1. еще раз спасибо, мне интересно, на какой глупый вопрос, который можно решить с помощью простой логики, вы снова ответите за меня.