我想在使用Pygame的游戏中做出盲目的影响。我正在考虑制作一个表面,用黑色填充它,然后在玩家所在的表面上移除一圈颜色,这样你就可以看到玩家了。我也想为火炬做同样的事情。我想知道我是否能够在Pygame中擦除部分表面。
答案 0 :(得分:1)
您可以创建一个带有Alpha通道的曲面(传递pygame.SRCALPHA
标志),用不透明的颜色填充它,然后在其上绘制一个透明色的形状(alpha值0)。
import pygame as pg
pg.init()
screen = pg.display.set_mode((800, 600))
clock = pg.time.Clock()
BLUE = pg.Color('dodgerblue4')
# I just create the background surface in the following lines.
background = pg.Surface(screen.get_size())
background.fill((90, 120, 140))
for y in range(0, 600, 20):
for x in range(0, 800, 20):
pg.draw.rect(background, BLUE, (x, y, 20, 20), 1)
# This dark gray surface will be blitted above the background surface.
surface = pg.Surface(screen.get_size(), pg.SRCALPHA)
surface.fill(pg.Color('gray11'))
done = False
while not done:
for event in pg.event.get():
if event.type == pg.QUIT:
done = True
elif event.type == pg.MOUSEMOTION:
surface.fill(pg.Color('gray11')) # Clear the gray surface ...
# ... and draw a transparent circle onto it to create a hole.
pg.draw.circle(surface, (255, 255, 255, 0), event.pos, 90)
screen.blit(background, (0, 0))
screen.blit(surface, (0, 0))
pg.display.flip()
clock.tick(30)
pg.quit()
您也可以使用另一个表面而不是pygame.draw.circle
来实现此效果。例如,您可以在图形编辑器中创建一个带有透明部分的白色图像,并将BLEND_RGBA_MIN
作为special_flags参数传递给Surface.blit
,当您将其blit到灰色表面时。
brush = pg.image.load('brush.png').convert_alpha()
# Then in the while or event loop.
surface.fill(pg.Color('gray11'))
surface.blit(brush, event.pos, special_flags=pg.BLEND_RGBA_MIN)