作者:还在琢磨
来源:CSDN
原文:https://blog.csdn.net/mbl114/article/details/78075409
版权声明:本文为博主原创文章,转载请附上博文链接!
敌人飞机类的设计和英雄非常类似,区别在于英雄的坐标计算在每一帧的时候计算,每一帧绘制。当敌人飞出屏幕之后,自动再随机设置飞机的初始坐标,实现飞机无穷无尽从地图上面往下飞。
# 敌人飞机
class EnemyPlane(object):
# 初始化敌人飞机
def __init__(self, scene):
# 加载飞机资源
self.image = pygame.image.load("./res/img-plane_1.png")
# 缓存主场景对象
self.main_scene = scene
# 飞机矩形
self.rect = self.image.get_rect()
# 子弹列表
self.bullet = Bullet(self.main_scene, True)
# 飞机速度
self.speed = 2
# 获得飞机矩形
def rect(self):
return self.rect
# 设置飞机位置
def set_pos(self, x, y):
self.rect[0] = x
self.rect[1] = y
# 飞机动作
def action(self):
# 子弹每次移动向上移动self.speed速度
self.rect.move_ip(0, self.speed)
# 如果飞机移动出屏幕则将飞机设置为不可见状态
if self.rect[1] > self.main_scene.size[1]:
# 当飞机飞出屏幕,重新设置飞机的初始位置,移动速度
# 随机产生x坐标,纵坐标使用为0
self.set_pos(random.randint(0, self.main_scene.size[1] - self.rect[2] - 20), 0)
# 随机设置飞机移动速度
self.speed = random.randint(2, 5)
# 绘制飞机
def draw(self):
self.main_scene.scene.blit(self.image, (self.rect[0], self.rect[1]))
在GameScene类的__init__函数中,我们预先创建了3个飞机
# 创建多个敌机
self.enemy_list = [EnemyPlane(self) for _ in range(3)]
在draw函数中绘制敌机
# 绘制
def draw_elements(self):
# 绘制地图
self.map.draw()
# 绘制英雄飞机
self.hero.draw()
# 依次绘制英雄飞机每一颗发射出去的子弹
for bullet in self.hero.bullets:
if bullet.visible:
bullet.draw()
# 绘制敌人飞机和飞机子弹
for plane in self.enemy_list:
plane.draw()
在action函数中,计算飞机坐标
# 绘制
def draw_elements(self):
# 绘制地图
self.map.draw()
# 绘制英雄飞机
self.hero.draw()
# 依次绘制英雄飞机每一颗发射出去的子弹
for bullet in self.hero.bullets:
if bullet.visible:
bullet.draw()
# 绘制敌人飞机和飞机子弹
for plane in self.enemy_list:
plane.draw()
作者没有写出敌人飞机的子弹发射代码,当然也没有写子弹显示代码。可以参照英雄飞机的代码来改写,不难。