Python 敌机出场

目标
使用 定时器 添加敌机
设计 Enemy 类
1、使用定时器添加敌机

运行 备课代码,观察 敌机的 出现规律:
1)、游戏启动后,每隔 1 秒 会 出现一架敌机;
2)、每架敌机 向屏幕下方飞行,飞行 速度不相同;
3)、每架敌机出现的 水平位置 也不尽相同;
4)、当敌机 从屏幕下方飞出,不会再飞回到屏幕中;

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

set_timer(eventid,milliseconds) -> None

set_timer 可以创建一个 事件;
可以在 游戏循环 的 事件监听 方法中不会到该事件;
第1个参数 事件代码 需要基于常量 pygame.USEREVENT 来指定;
USEREVENT 是一个整数,再增加的事件可以使用 USEREVENT+ 1 指定,依次类推…
通过 pygame.event.get() 可以获取当前时刻所有的 事件列表;
遍历列表 并且判断 event.type 是否等于 eventid,如果相等,表示 定时器事件 发生。

1.2 定义并监听创建敌机事件
pygame 的 定时器 使用套路非常固定:
1)、定义 定时器常量 — eventid;
2)、在 初始化方法 中,调用 set_timer 方法 设置定时器事件;
3)、在 游戏循环 中,监听定时器事件;

1)、定义事件
在 plane_sprites.py 的顶部定义 事件常量

# 敌机出现事件
CREATE_EVENT = pygame.USEREVENT

2、设计Enemy 类
1、游戏启动后,每隔 1 秒 会出现一架敌机;
2、每架敌机 向屏幕下方飞行,飞行 速度各部相同;
3、每架敌机出现的 水平位置 也不尽相同;
4、当敌机 从屏幕下方飞出,不会再飞回到屏幕中;
在这里插入图片描述
初始化方法:
指定 敌机图片;
随机 敌机的 初始位置 和 初始速度;
重写 update() 方法
判断 是否飞出屏幕,如果是,从 精灵组 删除;

2.1、 敌机类的准备

演练步骤
1、在 _create_sprites,添加 敌机精灵组;
敌机是 定时被创建的,因此在初始化方法中,不需要创建敌机;
2、在 _event_handler,创建敌机,并且 添加到精灵组;
调用 精灵组 的 add 方法可以 向精灵组添加精灵;
3、在 _update_sprites, 让 敌机精灵组 调用 update 和 draw 方法;
在这里插入图片描述

2.3 随机敌机位置和速度
1)、导入模块
在导入模块时,建议 按照以下顺序导入

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

修改 plane_sprites.py 增加 random 的导入

import random

2)、随机位置
在这里插入图片描述
使用 pygame.Rect 提供的 bottom 属性,在指定敌机初始化位置时,会比较方便。

bottom = y + height
y = bottom - height

2.4 移除屏幕销毁敌机
敌机移出屏幕之后,如果 没有撞到英雄,敌机的历史使命已经终结。
需要从 敌机组 删除,否则会造成 内存浪费。

检查敌机被销毁
del 内置方法会在对象被销毁前调用,在开发中,可以用于 判断对象是否被销毁。

def __del__(self):
	print("敌机挂了 %s" % self.rect)

代码实现
在这里插入图片描述
判断敌机是否飞出屏幕,如果是,调用 kill() 方法从所有组中删除。

def update(self):
	super().update(args)
	# 判断敌机是否移出屏幕
	if self.rect.y >= SCREEN_RECT.height:
		# 将精灵从所有组中删除
		self.kill()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值