pygame.Surface.blit方法将一个图像(Surface实例)绘制到另一个图像(Surface实例)上。 对于Surface实例screen,方法blit的具体用法为
rect=screen.blit(source,dest,area=None,special_flags=0)参数source是一个矩形图像(Surface实例),另一个矩形图像screee 参数dest可以是矩形图像源左上角的屏幕上的坐标。 例如,以下内容:
screen=pygame.display.set _ mode (200,200 ) #screen是一个Surface实例,宽度和高度分别为200screen.blit ) ##image,) 10,10
screen=pygame.display.set _ mode (200,200 ) rect=image.get_rect ) ) rect.x,rect.y=10,10 screen.bli pygame提供了另一种方法,使用python语句消除背景。 见第12条的案文。 行为如下图所示。 左图没有使用第12句。 右图使用了第12句。
完整的步骤如下。 光靠复制源程序是不能正常工作的。 必须使用绘图程序生成宽度和高度分别为100、背景为黑色、中间有外轮廓线和填充颜色为红色的圆的png格式的图形文件。 文件名称为“g.png”,必须保存在源程序所在的文件夹中才能正常工作。
importpygameblack=(0,0,0 ) )两种颜色创建方法bgcolor=pygame.color (blue ) pygame.init ) size=width,height=200, 创建200 #游戏窗口大小screen=pygame.display.set _ mode (size ) pygame.display.set _ caption (python语句中的背景除外)窗口p=pygame.transform.scale(p,(r.width///2,r.height//2) ) (p=PP r.height//2) )即使使用此条的背景没有这个酒吧。 背景fclock=pygame.time.Clock ) #有创建控制频率的clockfps=5 #定义,每秒有多少帧running=Truewhile running: # 处理结束事件或for event in pygame.event.get (3360 if event.type==pygame.quit : running=false screen.fill (bgcolor ) ) height //4) )在画面内的矩形上绘制图形# pygame.display.update (pygame.display.flip ) #,重新显示游戏场景fclock.tick ) (fps ) 程序在此帧运行了几秒钟。可选参数area是一个Rect对象,表示从source的area区域中检索图像并将其绘制在screen上。 如果source是图像image,包含2行4列8个等宽高的动画帧,宽度为width,高度为height,则每帧的宽度为width//4,帧高度为height//2 从source的area区域中逐帧取出图像并显示在screen上(10,10 )的方法如下。
screen=pygame.display.set _ mode (size ) image=pygame.image.load('pic/照片下1.png ' )。
convert_alpha() #背景已变透明frameNum=0 #帧号从0-7,初始为0,完成1帧,其值加1,到8,变0rect=image.get_rect()#左上角坐标(0,0),右下角坐标为(width,height)#表示从image的坐标(0,0)处,取宽rect.width//4,高为rect.height的一帧图像rect2=pygame.Rect(0,0,rect.width//4,rect.height//2)row=frameNum//4 #求整数商为行号,根据frameNum改变:0,1col=frameNum%4 #求余数为列号,根据frameNum改变:0,1,2,3rect2.x=col*rect2.width #rect2是blit方法第3个参数,frameNum=0,第1帧 rect2.y=row*rect2.height #=1,第2帧,...=3,第4帧,=4,第5帧... #从image中用rect2截取1帧在screen坐标(10,10)处显示screen.blit(image,(10,10),rect2)依此原理编写了一个有8帧的跑步程序。包含8帧跑步图形的图像为blit第1参数,如下图,该图像为png格式,背景已变透明。
程序运行效果图如下。可以看到从右向左跑的图像质量不太好,考虑是在去黑色背景时,将黑色小人某些部分作为背景变为透明,如果把黑色小人改为红色小人可能效果会变好。或者将透明背景颜色改为白色,从透明背景图像取出部分图像,失去透明,背景将变为白色,第33条语句改为去除背景色为白色,不知可行否。不知是否有其它更好的方法。
具体程序如下。仅拷贝源程序不能正确运行。可将上边8帧跑步图像用截图工具截图,保存为png格式文件,用网上背景透明网页或微软微软powerpoint将背景变为透明,保存到源程序所在文件夹的子文件夹pic中。
可选参数 special_flags 是 Pygame 1.8.0 新增的内容,用于指定混合的模式:BLEND_ADD,BLEND_SUB,BLEND_MULT,BLEND_MIN,BLEND_MAX;1.8.1 增加:BLEND_RGBA_ADD,BLEND_RGBA_SUB,BLEND_RGBA_MULT,BLEND_RGBA_MIN,BLEND_RGBA_MAX,BLEND_RGB_ADD,BLEND_RGB_SUB, BLEND_RGB_MULT,BLEND_RGB_MIN,BLEND_RGB_MAX;将来还可能添加更多新的标志。
应是将参数source(Surface对象)绘制到screen(Surface对象)上时,两者对应位置颜色的混合方式,默认方式应为参数source颜色覆盖screen对应点颜色。理解不知正确否。