pygame
最近在系统的学习python,在此记录学习过程,因为之前已经掌握python语法等基本知识因此直接从项目开始练手,项目来自《python编程从入门到实践》希望学习后能够对python熟练掌握。
第一个项目是借助pygame库编写的一个小游戏,在此记录pygame的相关函数和用法。
首先导入pygame库,本项目使用pycharm作为idle,file->settings->Project->Interpreter,点击加号在搜索框中搜索想要导入的库名,install即可。
下面介绍pygame相关函数及其功能用法:
- pygame.init() 初始化背景设置,使pygame能够进行后续的一系列工作
- pygame.display.set_model() 创建一个显示窗口,用来作为游戏的背景板绘制各种元素,它的参数为一个两个元素的元组,控制背景窗口的大小。值得注意的是其返回的是一个surface类型元素,在游戏中的每一个元素都是一个surface。
- pygame.event.get() 能够检测鼠标和键盘事件,能够促使游戏程序进行,例如当鼠标点击关闭按钮时,会检测到pygame.QUIT事件,此时我们应调用sys.exit()来退出游戏。
- pygame.display.flip() 命令pygame上最近绘制的屏幕窗口可见,在游戏中每次循环都绘制一个新的窗口并将旧窗口抹消,flip()函数可以不断更新屏幕。
- screen.fill(color) screen为surface元素,一般是指初始创建的窗口,fill()函数是指用背景色填充整个窗口,只接受一个能够表示一种颜色的实参(RGB)。
- pygame.image.load(url) 返回一个图形的surface,图片根据参数地址进行选择
- surface.get_rect() get_rect() 可获取相应surface的属性rect,可以将其理解为一个矩形框,在pygame中我们可以将对某种surface元素的操作近似为对矩形框的操作可以大大简化程序复杂度,而显示的效果几乎没有影响。在对rect元素进行操作时,我们可以使用矩形的四角和中心的x,y坐标来指定其位置,例如,要将元素居中可以使用center、centerx、centery,要想元素与屏幕边缘对齐,可用top、bottom、left或right,若要在水平和垂直方向移动元素位置,可用属性x和y,在pygame中原点(0,0)位于窗口屏幕的左上方,向右下方移动时坐标会逐渐增大。
- surface.blit(image,rect) 可以理解为surface利用此函数在自己身上画画,参数分别是要画的对象及位置。
- pygame.draw.rect(screen,color,rect) 利用color在screen将rect填充出来。
相应按键相关操作:
- 在pygame中,事件都是通过pygame.event.get()方法获取的,每次按键都被type为一个KEYDOWN事件,松开按键被type为KEYUP事件。event.type()可以返回当前触发事件的类型,event.key()可以返回当前按下的按键。结合if语句进行交互操作。
精灵:
- 在进行类设计时,可以继承pygame.sprite模块中的Sprite(精灵)类,通过使用精灵,我们可以将游戏中的相关元素进行编组,同时操作组内所有的元素,别忘了super()父类。
- pygame.sprite.Group类---实现编组,例如 bullets = Group()实现了一个子弹编组,在编组内的元素可受到同样的操作。bullets.remove(bullet) 删除编组中的元素
- draw()对编组调用draw()函数如 bullets.draw(),pygame会自动绘制编组的每一个元素,绘制的位置由元素的属性rect决定。参数是绘制载体如draw(screen)
- sprite.groupcollide() 检测两个编组的成员之间的碰撞,例如:pygame.sprite.groupcollide(bullets, aliens,True, True)意义是每当有子弹与外星人碰撞时,groupcollide()就在它返回的字典中增加一个键值对,两个参数True告诉pygame删除发生碰撞的两方。
- pygame.sprite.spritecollideany()接收两个实参,一个精灵和一个编组,它检测是否有成员与精灵发生了碰撞,并在碰撞后停止遍历编组并返回第一个与精灵碰撞的元素。