首页 > 编程知识 正文

非参数检验方法,位置参数的使用方法

时间:2023-05-06 08:58:36 阅读:157701 作者:1523

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中。

import pygameBLACK=(0,0,0) # 创建颜色两种方法bgcolor = pygame.Color('blue')pygame.init()size = width, height = 300,200screen = pygame.display.set_mode(size) #创建游戏窗口大小pygame.display.set_caption("跑步") #设置窗口标题image = pygame.image.load('pic/图片去底1.png').convert_alpha() #背景已变透明rect = image.get_rect()rect2 = pygame.Rect(0,0,rect.width//4,rect.height//2) #blit方法第3个参数fclock = pygame.time.Clock() #创建控制频率的clockfps = 5 #定义刷新频率x=0 #blit方法第2个参数的x坐标,y坐标不变frameNum=0 #帧号从0-7,初始为0,完成1帧,其值加1,到8,变0direction=0 #=0,从左到右跑,=1,从右到左跑running = Truewhile running: for event in pygame.event.get(): if event.type == pygame.QUIT: # 处理退出事件 running = False screen.fill(bgcolor) #设置背景的颜色 row=frameNum//4 #求整数商为行号,根据frameNum改变:0,1 col=frameNum%4 #求余数为列号,根据frameNum改变:0,1,2,3, rect2.x=col*rect2.width #rect2是blit方法第3个参数, rect2.y=row*rect2.height #根据frameNum改变,从image取不同帧 if direction==0: screen.blit(image, (x, 60),rect2) #在屏幕指定位置绘制图形 else: #不知反转图像是否还有其它更好的方法 p = pygame.Surface((rect2.width, rect2.height)) #创建一个Surface实例 p.blit(image, (0, 0), rect2) #从image中拷贝rect2区域图像到p,左上角对齐 p=pygame.transform.flip(p,True,False)# 反向 #p.convert_alpha() #加此条语句后不能去掉背景 p.set_colorkey(BLACK) #去图像背景,不理想 screen.blit(p, (x, 60)) frameNum+=1 if frameNum==8: frameNum=0 if direction==0: #=0,从左到右跑,x增加 x+=20 if x+80>width: #是否碰到右边界 direction=1 else: #=1,从右到左跑,x减少 x-=20 if x<0: #是否碰到左边界 direction=0 pygame.display.flip() #刷新游戏场景 fclock.tick(fps) #本帧中程序已运行了若干秒,为保证fps,该语句保证延迟余下时间pygame.quit()

可选参数 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对应点颜色。理解不知正确否。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。