一、课程内容二、学习目标三、知识点1.pygame.time.set_timer()2.pygame.sprite.Sprite3.pygame.sprite.Group四、难点五、延伸

一、课程内容

二、学习目标

三、知识点

1.pygame.time.set_timer()

time模块用于时间监控。

pygame.time.set_timer(eventid, milliseconds)

在事件队列中以一定时间间隔重复创建指定事件,实现事件定时执行的效果。

参数

eventid:要重复创建的事件的编号

milliseconds:以毫秒为单位的时间间隔,间隔为0时事件的定时器将被禁用

不同的事件通过编号进行区分,比如:QUIT事件的编号是12、MOUSEBUTTONDOWN事件的编号是5、KEYDOWN事件的编号是2。

当系统事件无法满足需求时,用户可以自定义事件。为了避免与“系统事件”的编号冲突,Pygame中预留了24~32区间的编号用于“用户事件”,编号24对应的常量是USEREVENT。

输出为:

2.pygame.sprite.Sprite

“精灵”术语源自旧计算机和游戏机时代,今天仍然使用这个术语表示2D动画、游戏中的任何可见对象。我们游戏中的对象想要成为“精灵”,只需要继承sprite模块中的Sprite类。

pygame.sprite.Sprite:一般用作可见游戏对象的父类

方法

__init__:子类继承时必须调用该方法

update:用于控制精灵的更新行为,默认实现不执行任何操作,可以在子类中“重写”该方法

例如:

精灵对象一般拥有通过image属性设定的“形象”和通过rect属性控制的“位置”。

3.pygame.sprite.Group

pygame.sprite.Group:用于保存和管理多个精灵对象的容器

方法

add():向组中添加新的精灵

remove():从组中移除指定精灵

draw(Surface):将包含的所有精灵绘制到Surface上

update():对包含的所有精灵调用update方法实现更新

例如:

效果如图:

相对于列表容器,精灵组Group有以下优势:

  1. 代码经过高度优化,能让游戏运行速度更快
  2. 提供了很多对精灵和精灵组进行“碰撞检测”的函数

四、难点

  1. 精灵组的绘制和更新。

    Group类的draw方法使用精灵对象的image属性和rect属性对组内所有精灵进行绘制;update方法调用所有精灵对象重写的update方法进行更新。

  2. 子弹精灵跟随我方飞机移动:创建子弹对象时,需要传递我方飞机“顶部中央”的位置用以定位。

五、延伸

想要深入了解“sprite模块”的更多信息,可以参考教程:https://www.pygame.org/docs/tut/SpriteIntro.html