每当我尝试用透明变量填充矩形(将其从屏幕上移除)时,其中一个矩形会变成棕色
whenever I try to fill a rect with a transparent variable (to remove it from the screen) one of the rects turns brown
我试图制作一个结束屏幕,每当我用我制作的透明变量填充球时,大头针就会消失(它应该消失)但球会变成一个棕色的正方形。还是我做错了什么?有解决方法吗?有没有办法只删除这两个矩形而不是文本?
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()
character
没有 Alpha 通道。使用 pygame.Surface.convert_alpha()
更改像素格式,包括每像素 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()
我试图制作一个结束屏幕,每当我用我制作的透明变量填充球时,大头针就会消失(它应该消失)但球会变成一个棕色的正方形。还是我做错了什么?有解决方法吗?有没有办法只删除这两个矩形而不是文本?
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()
character
没有 Alpha 通道。使用 pygame.Surface.convert_alpha()
更改像素格式,包括每像素 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()