Python学习日记-第二十五天-飞机大战(英雄设计)

这篇博客介绍了在Python中使用pygame库设计和移动英雄飞机的过程。首先,通过Hero类初始化英雄的位置和状态,然后利用pygame.key.get_pressed()方法实现英雄按住键持续移动。更新了Hero的update方法来处理移动边界,确保英雄不会移出屏幕。最后,博主分享了由于工作原因导致学习进度较慢的歉意。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系列文章目录

目标

·设计英雄

·使用pygame.key.get_pressed()移动英雄


一、设计英雄

英雄需求

  1. 游戏启动后,英雄出现在屏幕的水平中间位置,距离屏幕底部120像素
  2. 英雄默认不会移动,需要通过左/右方向键移动,控制在水平方向移动

思路:

Hero——英雄

·初始化方法

  指定英雄图片

  初始速度 = 0——英雄默认静止不动

  

·重写update方法

  英雄需要水平移动

  并且需要保证不能移出屏幕


1.1   准备英雄类

·在plane_sprites新建Hero类

·重写初始化方法,指定图片名称,并且将初始速度设置为0

·设置英雄的初始位置

·centerx = x + 0.5 * width

·centery = y + 0.5 * height

·bottom = y + height

操作:

 代码:

class Hero(GameSprite):
    """英雄精灵"""

    def __init__(self):

        # 1. 调用父类方法设置image和speed
        super().__init__("./images/me1.png", 0)

        # 2. 设置英雄的初始位置
        self.rect.centerx = SCREEN_RECT.centerx
        self.rect.bottom = SCREEN_RECT.bottom - 120

1.2    绘制英雄

①, 在__create_sprites,添加英雄精灵和英雄精灵组

  ·后续要针对英雄做碰撞检测以及发射子弹

  ·所以英雄需要单独定义成属性

 

②,  在__update_sprites,让英雄精灵组调用update和draw方法

 运行结果:




二、移动英雄的位置

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

·第一种 判断 event.type == pygame.KEYDOWN

操作:

 代码:

elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT
print(“向右移动”)

·第二种

  1. 首先使用pygame.key.get_pressed()返回所有按键元组
  2. 通过按键常量,判断元组中某一个键是否被按下——如果被按下,对应的数值为 1

操作:

 代码:

# 返回所有按键的元组,如果某一个键被按下,对应的数字位置1
keys_pressed = pygame.key.get_pressed()
#判断是否按下了方向键
if keys_pressed [pygame.K_RIGHT]:
print(“向右移动”)

(结论:使用第二种键盘模块的好处可以一直按住右键让英雄持续移动,操作灵活性更加好。而第一种是按一下动一下)


2.1   移动英雄位置

演练步骤

1.   在Hero类中重写update方法

  ·用速度 speed和英雄rect.x进行叠加

  ·不需要调用父类方法——父类方法只是实现了单纯的垂直运动

2.   在__event_handler方法中根据左右方向键设置英雄的速度

  ·向右->speed =2

  ·向左->speed = -2

  ·其他->speed = 0

 

 程序运行结果:

飞机可以左右移动操作了,如果想飞机移动快一点,可以把飞机移动的速度调快就行


2.2   控制英雄的运动边界

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

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

 

 这样之后,飞机就不会从屏幕的左右两边移动出去了


总结

英雄飞机设计就已经完成了。其实飞机和子弹一起做文章发出来比较好,但是因为最近白天要工作,只有晚上抽空学习,所以学习的进度比较慢。实在抱歉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值