找回密码
 会员注册
查看: 37|回复: 0

python游戏库pygame经典教程_pygame教程

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-8 17:02:21 | 显示全部楼层 |阅读模式
一.Pygame程序基本搭建过程1.初始化化程序2.创建Surface对象3.事件监听4.游戏循环二.PygameDisplay显示模块详解1.将Surface对象粘贴至主窗口上2.设置窗口主窗口3.填充主窗口背景,参数值RGB4.设置窗口5.更新屏幕内容6.pygame.display其他方法三.PygameSurface创建图像1.Surface模块创建图像2.Surface从外部加载图像四.PygameTransform图像变形五.PygameTime时间控制1.游戏暂停2.设置游戏的帧数率(FPS)六.PygameRect区域位置七.PygameEvent事件模块1.事件类型2.事件处理方法3.处理键盘事件4.处理鼠标事件八.PygameDra绘图函数1.绘制矩形2.绘制多边形3.绘制圆形4.绘制椭圆形5.绘制圆弧曲线6.绘制直线九.字体绘制十.音频播放一.Pygame程序基本搭建过程Pygame搭建游戏窗口主要为如下几步1.初始化化程序在使用Pygame编程之前,我们要对程序进行初始化,代码如下pygame.init()1该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化2.创建Surface对象Surface是Pygame编程的窗口界面,类似画布,图像和文本可以显示在Surface上,创建方式主要有以下方式(1)创建Surface对象:#也可以叫做screen对象,本质上是一个Surface对象screen=pygame.display.set_mode(400,400)12(2)创建一个带文本的Surface对象:#创建一个包含文字的Surface对象text=f.render("小马哥不马虎",True,(255,255,255),(0,0,0))#通过blit方法将其绘制出来,textRect表示位置坐标screen.blit(text,textRect)1234(3)创建一个包含图像的Surface对象:surface_image=pygame.image.load("图片路径")13.事件监听一个好的游戏少不了游戏与人的交互,通过事件,人按自己的想法对游戏进行交互如下是一个关闭游戏的简单交互:#所有get()获取事件foreventinpygame.event.get():#判断事件类型ifevent.type==pygame.QUIT:pygame.quit()123454.游戏循环代码:whileTrue:foreventinpymage.event.get():ifevent.type==pygame.QUIT:pymage.quit()sys.exit()#更新并绘制屏幕内容pygame.display.flip()1234567二.PygameDisplay显示模块详解Pygame使用pygame.display显示模块中的方法创建游戏的主窗口:格式:screen=pygame.display.set_mode(size=(),flags=0)1·size:用来设置窗口的大小·flags:功能标志位,表示创建的主窗口样式,flags参数如下:flags参数|标志位|功能||pygame.FULLSCREEN|创建一个全屏窗口||pygame.HWSURFACE|创建一个硬件加速窗口,必须和FULLSCREEN同时使用||pygame.OPENGL|创建一个OPENGL渲染窗口||pygame.RESIZABLE|创建一个可以改变大小的窗口||pygame.DOUBLEBUF|创建一个双缓冲窗口,建议在HWSURFACE或OPENGL时使用||pygame.NOFRAME|创建一个没有边框的窗口|1.将Surface对象粘贴至主窗口上代码:scrren.blit(source,dest,area=None,special_flage=0)1·source:表示要粘贴的Surface对象·dest:主窗口一个标识的坐标位置·area:接受一个Rect对象,默认为None,如果提供该参数则相当于抠图操作,即在屏幕的指定位置显示想要的内容·special_flags:可选参数,用于指定对应位置颜色的混合方式2.设置窗口主窗口screen=pygame.display.set_mode(400,400)13.填充主窗口背景,参数值RGBscreen.fill((156,156,156))14.设置窗口pygame.display.set.caption('小马哥不马虎')15.更新屏幕内容pygame.display.flip()16.pygame.display其他方法方法名称说明pygame.display.get_surface()获取当前显示的Surface对象pygame.display.flip()更新整个待显示的Surface对象到屏幕上pygame.display.update()更新部分软件界面显示pygame.display.lnfo()产生一个VideInfo对象,包含了显示界面的相关信息pygame.display.set_icon()设置左上角的游戏图标,图标尺寸大小为32*32pygame.display.iconify()将显示的主窗口即Surface对象最小化,或者隐藏pygame.display.get_active()当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False三.PygameSurface创建图像1.Surface模块创建图像语法格式:Surface=pygame.Surface(size=(width,height),flags,depth)1·size:表示Surface对象的矩形区域大小·flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道·depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节代码实例:importpygameimportsyspygame.init()#设置主窗口screen=pygame.display.set_mode((400,400))screen.fill('blue')#设置窗口pygame.display.set_caption('小马哥不马虎')#创建一个图像face=pygame.Surface((60,60),flags=pygame.HWSURFACE)#填充图像face.fill(color='pink')whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()#将图像添加到主屏幕上screen.blit(face,(100,100))#更新屏幕内容pygame.display.flip()12345678910111213141516171819202122效果:2.Surface从外部加载图像语法格式:pygame.image.load('图片路径').convert()1代码实例:importpygameimportsyspygame.init()#设置主窗口screen=pygame.display.set_mode((400,400))screen.fill('white')#设置窗口pygame.display.set_caption('小马哥不马虎')#加载图片image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)image_surface.scroll(100,60)#移动图片whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()#将图像添加到主屏幕上screen.blit(image_surface,(0,0))#更新屏幕内容pygame.display.flip()12345678910111213141516171819202122效果图:Surface模块处理图像方法:方法说明pygame.Surface.blit()将一个图像绘制到另一个图像上pygame.Surface.convert()修改图像的格式pygame.Surface.fill()使用纯色填充Surface图像pygame.Surface.scroll()复制并移动Surface对象pygame.Surface.set_alpha()设置整个图像的透明度pygame.Surface.get_at()获取一个像素的颜色值pygame.Surface.set_at()设置一个像素的颜色值pygame.Surface.get_palette()获取Surface对象8位索引的调色板pygame.Surface.map_rgb()将一个RGBA颜色转换为映射的颜色值pygame.Surface.set_clip()设置该Surface对象的剪切区域pygame.Surface.subsurface()根据父对象创建一个新的子Surface对象pygame.Surface.get_offset()获取子Surface对象在父对象中的偏移量pygame.Surface.get_size()获取Surface对象的大小四.PygameTransform图像变形Transform方法|方法|说明||pygame.transform.scale()|将图片缩放至指定的大小,并返回一个新的Surface对象||pygame.transform.rotate()|将图片旋转至指定角度||pygame.transform.rotozoom()|以角度旋转图像,同时将图像缩小或放大至指定的倍数|五.PygameTime时间控制1.游戏暂停Pygame.time模块提供以下常用方法方法说明pygam.time.get_ticks()以毫秒为单位获取时间pygame.time.wait()使程序暂停一段时间pygame.time.set_time()创建一个定时器,即每隔一段时间就去执行一些动作pygame.time.Clock()创建一个时间对象来帮助我们确定游戏要以多大的帧数运行代码实例:importpygamepygame.init()screen=pygame.display.set_mode((500,400))pygame.display.set_caption('时间设置')#获取时间t=pygame.time.get_ticks()#暂停游戏3000毫秒t1=pygame.time.wait(3000)print(t1)image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:exit()screen.blit(image_surface,(0,0))pygame.display.update()12345678910111213141516效果:三秒后加载图片2.设置游戏的帧数率(FPS)Clock()方法可以实现对游戏帧数的设置方法说明pygame.time.Clock.tick()更新clock对象pygame.time.Clock.get_time()获取上一个tick中的时间pygame.time.Clock.get_fps()计算clock对象的帧数代码实例:importpygamepygame.init()screen=pygame.display.set_mode((500,400))pygame.display.set_caption('时间设置')#获取时间t=pygame.time.get_ticks()#暂停游戏3000毫秒t1=pygame.time.wait(3000)print(t1)image_surface=pygame.image.load('C:/Users/myun/Pictures/不知火舞.jpg')#创建时间对象clock=pygame.time.Clock()whileTrue:#通过时间对象指定循环帧数,每秒循环60次clock.tick(60)foreventinpygame.event.get():ifevent.type==pygame.QUIT:exit()screen.blit(image_surface,(0,0))pygame.display.update()1234567891011121314151617181920注:游戏帧数中在动态图时才显现出来六.PygameRect区域位置Rect()方法创建一个指定位置,指定大小的矩形区域语法格式:Rect=pygame.Rect(left,top,width,height)1代码实例:importpygamepygame.init()screen=pygame.display.set_mode((500,300))pygame.display.set_caption('小马哥不马虎')image_surface=pygame.image.load("C:/Users/myun/Pictures/bg.jpg")rect1=pygame.Rect(50,50,100,100)#在原图的基础上创建一个新的子图(surface对象)image_child=image_surface.subsurface(rect1)whileTrue:foreventinpygame.event.get():ifevent.type==pygame.QUIT:exit()#在屏幕上显示子图的区域screen.blit(image_child,rect1)pygame.display.update()123456789101112131415效果:在图片上截取了一个和Rect1同样大小的矩形区域Rect对其他常用方法:方法说明pygame.Rect.copy()复制矩形pygame.Rect.move()移动矩形区域,接受一个列表参数pygame.Rect.move_ip()移动矩形(无返回)pygame.Rect.inflate()增大或缩小矩形pygame.Rect.clamp()将矩形移动到另一个矩形内pygame.Rect.union()返回两个矩形合并后的矩形pygame.Rect.fit()按横纵比调整矩形或移动矩形pygame.Rect.contains()测试一个矩形是否在另个矩阵内pygame.Rect.collidepoint()测试点是否在矩形中pygame.Rect.colliderect()测试两个矩形是否重叠七.PygameEvent事件模块1.事件类型通过事件类型,可以有序的,逐一的处理用户的操作事件|事件类型|描述|成员属性||    QOUIT|用户按下窗口的关闭按钮|none||ATIVEEVENT|Pygame被激活或者隐藏|gain,state|| KEYDOWN|键盘按下|unicode,key,mod||KEYUP|键盘释放|key,mod||MOUSEMOTION|鼠标移动|pos,rel,button||MOUSEBUTTONDOWN|鼠标按下|pos,button||MOUSEBUTTONUP|鼠标放开|pos,button||JOYAXISMOTION|游戏手柄(Joystickorpad)移动|joy,axis,value||JOYBALLMOTION|游戏球(Joy ball)移动|joy,axis,value||JOYHATMOTION|游戏手柄(Joystick)移动|joy,axis,value||JOYBUTTONDOWN|游戏手柄按下|joy,button||JOYBUTTONUP|游戏手柄放开|joy,button||VIDEORESIZE|pygame窗口缩放|size,w,h||VIDEOEXPOSE|Pygame窗口部分公开|none||USEREVENT|触发一个用户事件|事件代码|2.事件处理方法Pygam.event模块提供了处理事件的常用方法,如下:方法说明pygame.event.get()从事件队列获取一个事件,并在事件队列中删除该事件pygame.event.wait()阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态pygame.event.set_blocked()控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入pygame.event.pump()调用该方法后,Pygame会自动处理事件队列pygame.event.poll()会根据实际情况返回一个真实的事件,或者一个Nonepygame.event.peek()检测某类事件是否在队列中pygame.event.clear()从队列中清除所有的事件pygame.event.get_blocked()检测某一类型的事件是否被禁止进入队列pygame.event.post()放置一个新的事件在队列中pygame.event.Event()创建一个用户自定义的事件pygame.event.set_allowed()控制哪些事件允许进入队列一、Python所有方向的学习路线Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。二、Python必备开发工具工具都帮大家整理好了,安装就可直接上手!三、最新Python学习笔记当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。四、Python视频合集观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。五、实战案例纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。六、面试宝典简历模板网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。需要这份系统化学习资料的朋友,可以戳这里无偿获取一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-11 01:38 , Processed in 0.622271 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表