"""pygame遮罩mask测试练习程序.py mask测试,mask就是膜或罩的意思,可以从一个图片创建一个mask,但要转换alpha的图像,否则就失去了意义. 我们可以想像给一个透明的图片覆一层膜,也就是mask,但是透明的地方这层膜是不会覆盖的。 mask.overlap的offset偏移量是设置两个mask之间的x和y距离。例:Amask是一个迷宫的mask,Bmask是一个小球的mask 那么Amask.overlap(Bmask,offset) 会返回交叉点的坐标,Amask.overlap_area方法会返回交叉了多少像素。 offset的值是(Bmask.x - Amask.x,Bmask.y - Amask.y) 当我们操作这个小球,小球在迷宫中移动时,就可以用Amask.overlap检测小球是否碰到了迷宫的“墙壁”。 根据返回的像素点,判断其所在面的颜色,还能进一步进行颜色判断。 """ __author__ = "李兴球" __date__ = "2018年6月" import pygame from pygame import * pygame.init() screen = pygame.display.set_mode((480,360)) pygame.display.set_caption("pygame的mask测试_作者:李兴球") 小红块 = pygame.image.load("小红块.png").convert_alpha() 小红块rect = 小红块.get_rect() 测试图 = pygame.image.load("测试图.png").convert_alpha() 测试图rect = 测试图.get_rect() 小红块mask = pygame.mask.from_surface(小红块) 测试图mask = pygame.mask.from_surface(测试图) while True: for event in pygame.event.get(): if event.type ==QUIT:pygame.quit() if event.type == KEYDOWN: if event.key ==K_RIGHT: 小红块rect.x = 小红块rect.x + 10 if event.key ==K_LEFT: 小红块rect.x = 小红块rect.x -10 if event.key ==K_UP: 小红块rect.top = 小红块rect.top - 10 print(小红块rect) if event.key ==K_DOWN: 小红块rect.move_ip(0,10) screen.fill((0,0,0)) offsetX = 小红块rect.x - 测试图rect.x offsetY = 小红块rect.y - 测试图rect.y point = 测试图mask.overlap(小红块mask,(offsetX,offsetY)) someArea = 测试图mask.overlap_area(小红块mask,(offsetX,offsetY)) # 如果碰到了,返回点,区域的像素数,测试图碰点像素值,小红块碰点像素植,这样还能做颜色碰撞检测。 # 由于point是相对于是screen的坐标,所以这产生了坐标转换的问题, if point: px,py = point cx,cy = px - 测试图rect.x , py - 测试图rect.y pixel1 = 测试图.get_at((cx,cy)) qx,qy = px - 小红块rect.x ,py - 小红块rect.y pixel2 = 小红块.get_at((qx,qy)) print(point,someArea,pixel1,pixel2) mx,my = pygame.mouse.get_pos() screen.blit(测试图,(0,0)) screen.blit(小红块,小红块rect) pygame.display.set_caption(str(mx) + "," + str(my)) pygame.display.update()
发表评论