|
一、什么是pygame  ygame是一个基于Python的游戏开发库,它提供了一系列的工具和接口,使开发人员能够轻松地创建各种类型的游戏,包括2D游戏和简单的3D游戏,主要是为了开发2D游戏而生。具有免费、开源,支持多种操作系统,具有良好的跨平台性等优点。在开始学习Pygame之前,您需要先安装Pygame库。您可以通过以下命令在命令行中安装pipinstallpygame 输入以下代码检测pygame是否安装成功importpygamepygame.ver二、基本屏幕设置使用方法 pygame基本使用模块模块名功能pygame.cdrom访问光驱pygame.cursors加载光标pygame.display访问显示设备pygame.draw绘制形状、线和点pygame.event管理事件pygame.font使用字体pygame.image加载和存储图片pygame.joystick使用游戏手柄或类似的东西pygame.key读取键盘按键pygame.mixer声音pygame.mouse鼠标pygame.movie播放视频pygame.music播放音乐pygame.overlay访问高级视频叠加pygame.rect管理矩形区域pygame.sndarray操作声音数据pygame.sprite操作移动图像pygame.surface管理图像和屏幕pygame.surfarray管理点阵图像数据pygame.time管理时间和帧信息pygame.transform缩放和移动图像 模块的具体使用方法 1、pygame概括化使用流程 (1)pygame.init()初始化 pygame.init()是Pygame库中的初始化函数,它用于初始化Pygame的各种子模块和设置,以准备创建游戏或图形应用程序。调用pygame.init()的目的是确保Pygame环境正确准备好,以便在程序中使用Pygame的各种功能。这个函数通常在程序的开始处调用,以确保Pygame能够正常工作。在调用pygame.init()之后,你可以使用Pygame的各种模块来处理图形、音频、事件等。例如,你可以创建游戏窗口、加载图像、播放音频等操作。一旦初始化完成,你可以开始使用Pygame编写游戏逻辑并启动游戏循环。请注意,一旦初始化完成,你也可以通过pygame.quit()来清理Pygame环境和资源,通常是在程序结束时使用,以确保资源被正确释放。 初始化时显示pygame.init() pygame.init():该代码是整个程序的第一句代码,它的作用是自动检测Pygame软件包是否正常,并完成包括display(显卡模块),font(字体模块),mixer(声音模块),cursors(光标控制模块)等的模块的初始化 pygame.display.set_mode():创建一个窗口或屏幕,其大小由(width,height)指定,width表示窗口宽度,height代表屏幕高度。这个函数返回一个Surface对象,代表了整个屏幕。 (2)创建一个Surface对象 Surface是Pygame的编程窗口,像一个画布一样,能在上面进行显示,图像和文本能显示在Surface上 (1)创建Surface对象screen=pygame.display.set_mode((800,600)) (2)创建一个带文本的页面#设置字体f=pygame.font.Font(None,36)#创建包含文字的Surface对象text=f.render("简单的Pygame窗口",True,(255,255,255),(0,0,0))#获取文本的大小并创建一个合适的RecttextRect=text.get_rect()textRect.topleft=(100,50)#设置文本的左上角位置#通过blit方法将其绘制出来screen.blit(text,textRect) (3)创建一个带图像的画面importpygamepygame.init()screen=pygame.display.set_mode((800,600))image=pygame.image.load('155410.png')screen.blit(image,(0,0))#图像左上角在窗口的(0,0)坐标pygame.display.flip()#更新整个屏幕的显示 (4)事件监听#所有get()获取事件foreventinpygame.event.get():#判断事件类型ifevent.type==pygame.QUIT:pygame.quit() 利用foreventinpygame.event.get对上次调用后所有事件进行遍历,其中pygame.envent.get()会获取pygame事件队列里面的所有事件,并返回一个事件列表(这些事件可能包括按键按下、鼠标点击、窗口关闭等用户或系统的交互动作) ifevent.type==pygame.QUIT,此语句是用来检测当前遍历的事件是否属于pygame.QUIT类型(pygame.QUIT类型是一种特殊的事件类型,一般当用户点击窗口关闭按钮是pygame会产生该事件) pygame.quit是一个很重要的函数,这个函数用于正确的关闭pygame库,并且释放资源退出程序 (5)游戏循环 游戏循环的作用whileTrue:foreventinpymage.event.get():ifevent.type==pygame.QUIT:pymage.quit()sys.exit()#更新并绘制屏幕内容pygame.display.flip() whileTrue: 这是一个无限循环,通常用于创建游戏循环。游戏循环是一个持续运行的循环,用于处理游戏逻辑,更新游戏状态和绘制图形。 foreventinpygame.event.get(): 这是一个事件处理循环。它迭代遍历通过pygame.event.get()函数获取的所有事件。Pygame会将各种事件(例如按键按下、鼠标移动、窗口关闭等)存储在一个事件队列中,通过这个循环可以处理这些事件。 ifevent.type==pygame.QUIT:这是一个条件语句,用于检查事件的类型是否为窗口关闭事件。pygame.QUIT是一个表示窗口关闭事件的常量。 pygame.quit(): 如果检测到窗口关闭事件,这行代码会调用pygame.quit()函数,用于清理Pygame环境和资源,以确保程序正确退出。这会关闭Pygame窗口并释放游戏资源。sys.exit():这是一个用于退出程序的函数。它会终止程序的执行,退出游戏循环,从而结束程序的运行。 pygame.display.flip():这行代码用于更新屏幕内容。在游戏循环中,通常会进行游戏状态的更新和图形的绘制,然后使用pygame.display.flip()来刷新屏幕,以显示最新的游戏画面。 2.pygame.display显示模块具体使用方法 (1)Pygame使用pygame.display显示模块中的方法创建游戏的主窗口: 函数书写格式#写法一window=pygame.display.set_mode(size=(),flags=0)#size:用来设置窗口的大小#flags:功能标志位,表示创建的主窗口样式#写法二window_size=(800,600)#创建游戏窗口window=pygame.display.set_mode(window_size)标志位功能pygame.FULLSCREEN创建一个全屏窗口pygame.HWSURFACE创建一个硬件加速窗口,必须和FULLSCREEN同时使用pygame.OPENGL创建一个OPENGL渲染窗口pygame.RESIZABLE创建一个可以改变大小的窗口pygame.DOUBLEBUF创建一个双缓冲窗口,建议在HWSURFACE或者OPENGL时候使用pygame.NOFRAME创建一个没有边框的窗口 (2)将Surface对象粘贴至主窗口上:#导入Pygame库importpygame#导入sys库,用于退出程序importsys#初始化Pygamepygame.init()#定义窗口大小和screen_width=1600#窗口宽度screen_height=1000#窗口高度screen=pygame.display.set_mode((screen_width,screen_height))#创建一个游戏窗口pygame.display.set_caption("简单的Pygame窗口")#设置窗口#加载图像image=pygame.image.load("屏幕截图2024-01-15155410.png")#加载一个图像文件(请替换成你的图像文件路径)#进入主循环whileTrue:foreventinpygame.event.get():#获取Pygame事件ifevent.type==pygame.QUIT:#如果事件类型是窗口关闭pygame.quit()#退出Pygamesys.exit()#退出程序#在窗口上绘制图像screen.blit(image,(0,0))#将加载的图像绘制到窗口左上角(坐标(0,0))#更新屏幕内容pygame.display.flip()#刷新窗口,显示最新的游戏画面这是一个完整的代码窗口创建流程,其中#在窗口上绘制图像screen.blit(image,(0,0))#将加载的图像绘制到窗口左上角(坐标(0,0))这行代码是在游戏窗口上绘制一个图像,且图像的坐标为(0,0),而image是需要导入的Surface对象 (3)设置窗口主窗口,以及主窗口的命名:#定义窗口大小和screen_width=1600#窗口宽度screen_height=1000#窗口高度screen=pygame.display.set_mode((screen_width,screen_height))#创建一个游戏窗口pygame.display.set_caption("简单的Pygame窗口")#设置窗口 通过定义两个参数screen_width=1600,screen_height=1000对窗口的大小进行限定;利用screen=pygame.display.set_mode((screen_width,screen_height))来创建窗口;pygame.display.set_caption("简单的Pygame窗口")来对窗口进行命名 (4)填充主窗口的背景,并用RGB参数值的颜色进行填充:#填充窗口背景为灰色screen.fill((156,156,156)) (5)更新屏幕的内容:#更新屏幕内容pygame.display.flip()#刷新窗口,显示最新的游戏画面 通过pygame中的display.flip方法来对窗口的内容进行更新,以显示最新的画面 (6)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 3.利用pygame的Surface来创建图像importpygameimportsys#初始化Pygamepygame.init()#定义窗口大小和screen_width=1600screen_height=1000screen=pygame.display.set_mode((screen_width,screen_height))pygame.display.set_caption("简单的Pygame窗口")#创建一个新的Surface对象width=200#新Surface的宽度height=200#新Surface的高度flags=pygame.SRCALPHA#使用SRCALPHA标志以支持Alpha透明度depth=32#32位颜色深度new_surface=pygame.Surface((width,height),flags,depth)#加载图像image=pygame.image.load("屏幕截图2024-01-15155410.png")#加载一个图像文件(请替换成你的图像文件路径)#进入主循环whileTrue:foreventinpygame.event.get():#获取Pygame事件ifevent.type==pygame.QUIT:#如果事件类型是窗口关闭pygame.quit()#退出Pygamesys.exit()#退出程序#在新Surface上绘制图像new_surface.fill((255,0,0))#填充新Surface为红色背景new_surface.blit(image,(0,0))#将加载的图像绘制到新Surface的左上角#填充窗口背景为灰色screen.fill((156,156,156))#在窗口上绘制新Surfacescreen.blit(new_surface,(100,100))#将新Surface绘制到窗口的(100,100)位置#更新屏幕内容pygame.display.flip()#刷新窗口,显示最新的游戏画面 (1)Surface模块创建图像#创建一个新的Surface对象width=50#新Surface的宽度height=50#新Surface的高度flags=pygame.SRCALPHA#使用SRCALPHA标志以支持Alpha透明度depth=32#32位颜色深度new_surface=pygame.Surface((width,height),flags,depth)#格式Surface=pygame.Surface(size=(width,height),flags,depth)#size:表示Surface对象的矩形区域大小#flage:功能标志位,有两个可选参数值HWSURFACE和SPCALPHA,前者代表将创建的Surface对象存放于显存中,后者表示让图像的每一个像素包含一个alpha通道#depth:指定像素的颜色深度,默认为自适应模式,由Pygame自动调节 pygame.SRCALPHA 是Pygame库中的一个特殊标志,用于在创建新的Surface对象时指示该Surface具有Alpha透明度支持。具体来说,SRCALPHA表示要为新的Surface分配一个Alpha通道,以便你可以控制每个像素的透明度。 Alpha透明度是指图像的每个像素的透明程度或不透明程度。Alpha通道是图像中存储每个像素Alpha透明度值的一种方式。它通常是一个独立的颜色通道,与红、绿和蓝通道一起组成了一个像素的颜色。每个像素都有一个与之关联的Alpha通道值,用于表示该像素的透明度。运行结果示例: (2)Surface从外部加载图像 引入外部图像的代码image_surface=pygame.image.load('E:\超级玛丽\屏幕截图2024-01-15155410.png')#加载一个图像文件 完整代码:importpygame#导入Pygame库importsys#导入sys库,用于退出程序pygame.init()#初始化Pygame#设置主窗口screen=pygame.display.set_mode((800,600))#创建一个800x600像素的游戏窗口screen.fill('white')#填充窗口背景为白色#设置窗口pygame.display.set_caption('简单的Pygame窗口')#设置游戏窗口为'简单的Pygame窗口'#加载图片image_surface=pygame.image.load('E:\超级玛丽\屏幕截图2024-01-15155410.png')#加载一个图像文件#填充图片的指定区域为蓝色image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)#上面这行代码的作用是将加载的图像的指定区域(矩形区域,左上角坐标为(100,100),宽度为100像素,高度为50像素)填充为蓝色。image_surface.scroll(100,60)#移动图片#上面这行代码的作用是将加载的图像向右移动100像素,向下移动60像素。whileTrue:foreventinpygame.event.get():#获取Pygame事件ifevent.type==pygame.QUIT:#如果事件类型是窗口关闭pygame.quit()#退出Pygamesys.exit()#退出程序#将图像添加到主屏幕上screen.blit(image_surface,(0,0))#将加载的图像绘制到主窗口的左上角(0,0)位置#更新屏幕内容pygame.display.flip()#刷新窗口,显示最新的游戏画面 运行结果: 4.利用pygame的Transform使图像变形 transform方法方法说明pygame.transform.scale()将图片缩放至指定的大小,并返回一个新的Surface对象pygame.transform.rotate()将图片旋转至指定角度pygame.transform.rotozoom()以角度旋转图像,同时将图像缩小或放大至指定的倍数 5.利用pygame的time进行时间的控制 (1)游戏暂停 利用pygame.time.get_ticks()来获取时间importpygameimportsyspygame.init()#设置主窗口screen=pygame.display.set_mode((800,600))screen.fill((255,255,255))#白色背景#设置窗口pygame.display.set_caption('简单的Pygame窗口')#加载图片image_surface=pygame.image.load('E:\超级玛丽\屏幕截图2024-01-15155410.png')#初始化滚动变量scroll_x=0scroll_y=0last_update_time=pygame.time.get_ticks()whileTrue:#检查退出事件foreventinpygame.event.get():ifevent.type==pygame.QUIT:pygame.quit()sys.exit()#获取当前时间current_time=pygame.time.get_ticks()#每隔100毫秒滚动一次图片ifcurrent_time-last_update_time>100:last_update_time=current_timescroll_x+=10#每次水平滚动10像素scroll_y+=5#每次垂直滚动5像素image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)image_surface.scroll(scroll_x,scroll_y)#将图像添加到主屏幕上screen.blit(image_surface,(0,0))#更新屏幕内容pygame.display.flip() 在上面的代码中,last_update_time=pygame.time.get_ticks()的作用是用来记录上一次更新操作的时间点。在游戏循环中,首先获取当前的毫秒数时间戳,使用pygame.time.get_ticks()函数得到current_time变量。然后,通过计算current_time-last_update_time来确定自上一次更新操作以来经过了多少毫秒时间。 如果经过的时间超过了100毫秒(即current_time-last_update_time>100),就执行一次图像的滚动操作。接着,将last_update_time更新为当前时间,以便下一次循环中继续计算时间间隔。last_update_time变量的作用是跟踪上一次图像滚动操作的时间点,以便在控制每次滚动的时间间隔时使用,确保图像以恰当的速度滚动。 利用pygame.time.wait()来暂停一段时间和利用pygame.time.set_time()创建一个定时器,即每隔一段时间就去执行一些动作importpygame#导入pygame库pygame.init()#初始化pygame#创建一个窗口,尺寸为500x400像素screen=pygame.display.set_mode((500,400))#设置窗口的为'时间设置'pygame.display.set_caption('时间设置')#获取当前时间(自pygame初始化以来的毫秒数)t=pygame.time.get_ticks()#暂停游戏3000毫秒(3秒)t1=pygame.time.wait(3000)#打印暂停时间(这里应该是3000,因为pygame.time.wait返回的是暂停的毫秒数)print(t1)#加载一张图片(确保文件路径正确)image_surface=pygame.image.load('E:\\超级玛丽\\屏幕截图2024-01-15155410.png')#进入游戏的主循环whileTrue:#遍历所有的事件foreventinpygame.event.get():#如果事件类型是QUIT(例如点击了关闭窗口的按钮),则退出程序ifevent.type==pygame.QUIT:exit()#将加载的图片绘制到窗口的(0,0)位置screen.blit(image_surface,(0,0))#更新整个屏幕的显示pygame.display.update()
|
|