-
和平精英(三)
-
目标
- 添加移动靶
-
知识点
-
1、加载图片和声音
- 加载靶子的图片和射击子弹的声音可通过如下两步实现:首先,使用pygame.image.load()方法加载图片,图片文件是 target.png;其次,使用
pygame.mixer.Sound()加载音乐文件,音乐文件是 shoot.wav。
-
2、定义靶子类
-
定义靶子类需要确定属性和方法。靶子的属性有:坐标,用 x 和 y 表示;大小,用 width和 height 表示;图片,用 img 表示;移动间距,用 perx 表示,每次出现一个靶子,就随机一个移动间距值,这样就可以实现靶子移动速度的不同了。
- 代码实现
-
3、添加靶子对象
- 使用列表存储创建好的靶子对象,因为屏幕中每次只有一个靶子,所以当列表为空时,就向其添加一个靶子对象,否则就不用添加。具体方法如下:首先,定义一个空列表 targets,用来存储靶子对象;然后,定义 targetEnter 方法,在方法中判断列表 targets 的长度,如果为 0,向列表中添加靶子对象Target(1260,280,60,90,target,random.randint(3,9))。
-
4、画出靶子并移动
- 游戏的效果为靶子从右侧逐渐移动到左侧,如果打中,则立刻再重新出现一个靶子。这个效果可以通过如下三步实现:首先,定义 drawTarget 方法,在方法中使用 for in 循环遍历 targets 列表,调用 target 的 draw 方法;然后,定义 targetMove 方法,在方法中使用 for in 循环遍历 targets 列表,调用 target 的 move 方法;最后,找到主程序循环中,
在判断游戏状态为运行状态下,调用 targetEnter 方法、drawTarget 方法以及 targetMove方法
- 单词
-
和平精英(四)
-
目标
- 瞄准打靶
-
流程
-
1、删除无效靶子
-
为实现当靶子移出屏幕后会再次从右侧出现的效果,可通过如下三步:
- 首先,定义deleteTarget 方法,使用 for in 循环遍历 targets 列表;然后,判断靶子的 x 坐标,如果小于-60,调用 remove 方法将靶子移除;最后,在主程序循环中调用 deleteTarget 方法。
-
2、检测射中靶子
-
当瞄准镜的中心点打中头部时,即为射中靶子,所以需要分析出镜头中心点的 x 坐标
和靶子头部的 x 坐标之间存在的关系。靶子的宽度为 60,镜头的宽度为 100,可得镜头中
心点的坐标是 camera.x+50,靶子头部左侧的坐标约为 target.x+20,右侧的坐标约为
target.x+40。所以想要射中靶子,镜头就需要在这两个坐标之间
- 分析出坐标后,为靶子类添加检测方法 hit,并传入参数 c,用来表示镜头。方法中使
用 return 返回镜头的 x 坐标的取值范围。
-
3、完成射击靶子
- 当发生鼠标点击事件,并且游戏处在运行状态时:调用 play 方法,播放发射子弹声音;
使用 for in 循环遍历 targets 列表,判断是否被击中;如果击中,则使用 remove 方法移除目标靶子。
- 单词