赞
踩
先看效果:
第一处是如何让一张图片在另一张图片上面,这里运用到了pygame.surface.blit(),刚好可以达到此时效果。
- draw_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)
- draw_surface.blit(image_surface, (0, 0)) # blit 将一个图像绘制到另一个图像上方
- draw_surface.blit(mask_surface, (0, 0))
第二处是如何在表层达到刮刮乐效果,这里比较简单,直接运用擦除即可。
- for event in pygame.event.get():
- if event.type == pygame.MOUSEMOTION:
- if pygame.mouse.get_pressed()[0]: #鼠标左键
- # 在表层上绘制擦除线条 圆形
- pygame.draw.circle(mask_surface, (0, 0, 0, 0), event.pos, 30)
- import pygame
- import random
- # 初始化 Pygame
- pygame.init()
-
- a=random.randint(1,4) #可通过随机数获取随机图片
-
- mask_image = pygame.image.load("qs.jpg") #表层图片
- image = pygame.image.load(f"{a}.jpg") #底层图片
-
- # 创建屏幕和加载图片
- #屏幕大小根据实际修改
- screen = pygame.display.set_mode(image.get_size())
- # 将表层图片缩放至与底层图片相同大小
- mask_image = pygame.transform.scale(mask_image, image.get_size())
-
- # 转换表层和底层图片的表面类型为 alpha 模式 其实就是改变了透明度
- mask_surface = mask_image.convert_alpha()
- image_surface = image.convert_alpha()
-
-
-
- # 游戏主循环
- def main_loop():
- while True:
- for event in pygame.event.get():
- if event.type == pygame.MOUSEMOTION:
- if pygame.mouse.get_pressed()[0]: #鼠标左键
- # 在表层上绘制擦除线条 圆形
- pygame.draw.circle(mask_surface, (0, 0, 0, 0), event.pos, 30)
-
-
- if event.type == pygame.QUIT:
- pygame.quit()
- return
-
- # 将底部图片和表层图片绘制到 draw_surface 上
- draw_surface = pygame.Surface(image.get_size(), flags=pygame.SRCALPHA)
- draw_surface.blit(image_surface, (0, 0)) #image_surface blit 将一个图像绘制到另一个图像上方
- draw_surface.blit(mask_surface, (0, 0)) #mask_surface
-
-
-
- # 在屏幕上绘制合成后的表面
- screen.blit(draw_surface, (0, 0))
-
- pygame.display.flip()
-
- if __name__ == "__main__":
- main_loop()

底层图片:
表层图片(原表层图片太大没法压缩,就随便放了一个图):
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。