python入门

054_wz_hm_项目实战——飞机大战之英雄

2020-09-05  本文已影响0人  王泽0106

设计英雄和子弹类

英雄需求:

  1. 游戏启动后,英雄出现再屏幕的水平中间位置,距离屏幕底部120像素
  2. 英雄每隔0.5秒发射一次子弹,每次连发三枚子弹
  3. 英雄默认不会移动,需要通过左/右方向键控制英雄在水平方向的移动

子弹需求

  1. 子弹从英雄的正上方沿直线向上方飞行
  2. 飞出屏幕后,需要从精灵组中删除
子弹与英雄类

Hero——英雄

1. 初始化方法

创建英雄

准备英雄类

Rect类提供的属性
英雄飞机位置

代码实现:

英雄类

绘制英雄

  1. __create_sprites,添加英雄精灵和英雄精灵组
英雄精灵与精灵组
  1. __update_sprites,让英雄精灵组调用updatedraw方法
    英雄更新绘制

移动英雄位置

在python中针对键盘按键的捕获,有两种方式:

  1. 判断event.type == pygame.KEYDOWN
  2. 1) 首先使用pygame.key.get.pressed()返回所有按键元素
    2) 通过键盘常量,判断元组中某一个键是否被按下——如果被按下对应数值为1
    两种方式

提问:这两种方式有什么区别呢?
答:第一种方式用户必须要抬起按键才算一次按键事件,操作灵活性大打折扣;第二种方式用户可以按住方向键不放,就能够实现持续向某一个方向移动,灵活性更好

移动实现

  1. Hero类中重写update方法
update
  1. __event_handler方法中根据左右方向键设置英雄的速度
__event_handler

控制英雄的运动边界

Hero类的update()方法判断英雄是否超出屏幕边界

pygame.Rect
right = x + width利用right属性可以非常容易的针对右侧设置精灵位置 设置精灵位置

发射子弹

添加发射子弹事件

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

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

定义子弹类

Bullet——子弹

  1. 初始化方法
  1. 重写update()方法
Bullet类

发射子弹

  1. Hero的初始化方法中创建子弹精灵组属性
子弹精灵组
  1. 修改plane_main.py__update_sprites方法,让子弹精灵组调用updatedraw方法
绘制子弹
  1. 实现fire()方法
fire方法

一次发射三枚子弹

三枚子弹位置
修改fire()方法 fire方法

2020.9.4

上一篇下一篇

猜你喜欢

热点阅读