053_wz_hm_项目实战——飞机大战之敌机
2020-08-30 本文已影响0人
王泽0106
敌机出场
使用定时器添加敌机
- 游戏启动后,每隔一秒出现一架敌机
- 每架敌机向屏幕下方飞行,飞行速度各不相同
- 每架敌机出现的水平位置也不尽相同
- 当敌机从屏幕下方飞出,不会再飞回到屏幕中
定时器
在pygame
中可以使用pygame.time.set_timer()
来添加定时器,所有定时器,就是每隔一段时间,去执行一些动作
set_timer(eventid, millisconds) -> None
-
set_timer
可以创建一个事件 - 可以在游戏循环的事件监听方法中捕获到该事件
- 第一个参数事件代号需要基于常量
pygame.USEREVENT
来指定,USEREVENT
是一个整数,再增加的事件可以使用USEREVENT + 1
指定,依此类推 - 第二个参数是事件触发间隔的毫秒值
定时器事件的监听:
通过pygame.event.get()
可以获取当前时刻所有的事件列表,遍历列表并且判断event.type
是否等于eventid
,如果相等,表示定时器事件发生
定义并监听创建敌机的定时器事件
pygame的定时器使用套路非常固定:
- 定义定时器常量——
eventid
定义定时器常量
- 在初始化方法中,调用
set_timer
方法设置定时器事件设置定时器事件
- 在游戏循环中,监听定时器事件
监听定时器事件
设计Enemy类

初始化方法:
- 指定敌机图片
- 随机敌机的初始位置和初始速度
重写update()方法:判断是否飞出屏幕,如果是则从精灵组删除
敌机类的准备

创建敌机
- 在
__create_sprites
添加敌机精灵组,敌机是被定时创建的,因此在初始化方法中,不需要创建敌机创建敌机精灵组
- 在
__event_handler
创建敌机,并且添加到精灵组定时器事件触发添加敌机事件
- 在
__update_sprites
让敌机精灵组调用update
和draw
方法更新敌机
精灵与精灵组
随机敌机位置和速度
1. 导入模块
在导入模块时,建议按照以下顺序导入
1.官方标准模块导入
2.第三方模块导入
3.应用程序模块导入
在plane_sprites.py
中导入random
模块
2. 随机位置

使用
pygame.Rect
提供的bottom
属性,在指定敌机初始位置时会比较方便
bottom = y + height
y = bottom -height
注:bottom n. 底部
3. 代码实现

销毁移出屏幕的敌机
敌机移出屏幕后,如果没有撞到英雄,那么敌机的使命已经完结,需要从敌机精灵组中删除,否则会造成内存的浪费
1. 检测敌机被销毁
__del__
内置方法会在对象被销毁前调用,在开发中,可以用于判断对象是否被销毁
2. 代码实现
判断敌机是否飞出屏幕,如果是调用kill()
方法从所有组中删除
