053_wz_hm_项目实战——飞机大战之敌机

敌机出场

使用定时器添加敌机

  1. 游戏启动后,每隔一秒出现一架敌机
  2. 每架敌机向屏幕下方飞行,飞行速度各不相同
  3. 每架敌机出现的水平位置也不尽相同
  4. 当敌机从屏幕下方飞出,不会再飞回到屏幕中

定时器

pygame中可以使用pygame.time.set_timer()来添加定时器,所有定时器,就是每隔一段时间,去执行一些动作

set_timer(eventid, millisconds) -> None
  • set_timer可以创建一个事件
  • 可以在游戏循环的事件监听方法中捕获到该事件
  • 第一个参数事件代号需要基于常量pygame.USEREVENT来指定,USEREVENT是一个整数,再增加的事件可以使用USEREVENT + 1指定,依此类推
  • 第二个参数是事件触发间隔的毫秒值

定时器事件的监听:
通过pygame.event.get()可以获取当前时刻所有的事件列表,遍历列表并且判断event.type是否等于eventid,如果相等,表示定时器事件发生

定义并监听创建敌机的定时器事件

pygame的定时器使用套路非常固定:

  1. 定义定时器常量——eventid
    定义定时器常量
  2. 初始化方法中,调用set_timer方法设置定时器事件
    设置定时器事件
  3. 游戏循环中,监听定时器事件
    监听定时器事件

设计Enemy类

Enemy类
初始化方法:
  • 指定敌机图片
  • 随机敌机的初始位置初始速度

重写update()方法:判断是否飞出屏幕,如果是则从精灵组删除

敌机类的准备

Enemy类

创建敌机

  1. __create_sprites添加敌机精灵组,敌机是被定时创建的,因此在初始化方法中,不需要创建敌机
    创建敌机精灵组
  2. __event_handler创建敌机,并且添加到精灵组
    定时器事件触发添加敌机事件
  3. __update_sprites让敌机精灵组调用updatedraw方法
    更新敌机
    精灵与精灵组

随机敌机位置和速度

1. 导入模块
在导入模块时,建议按照以下顺序导入

1.官方标准模块导入
2.第三方模块导入
3.应用程序模块导入

plane_sprites.py中导入random模块2. 随机位置

x与y

使用 pygame.Rect提供的 bottom属性,在指定敌机初始位置时会比较方便
  • bottom = y + height
  • y = bottom -height

注:bottom n. 底部3. 代码实现

随机位置与速度

销毁移出屏幕的敌机

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

销毁超出屏幕的敌机
2020.8.30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值