IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python学习日记-第二十五天-飞机大战(英雄设计) -> 正文阅读

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

系列文章目录

目标

·设计英雄

·使用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属性可以非常容易的针对右侧设置精灵位置

?

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


总结

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

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 11:52:04  更:2022-10-31 11:52:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/26 3:33:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计