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学习日记-第二十二天- 飞机大战项目准备(理解精灵 和精灵组)

系列文章目录

  1. 项目准备
  2. 使用pygame 创建图形窗口
  3. 理解图像并实现图像绘制
  4. 理解游戏循环 和 游戏时钟
  5. 理解精灵 和精灵组


前言

今天是更新飞机大战项目准备,最有一个环节

理解精灵和精灵组


五、理解精灵和精灵组

5.1? 精灵和精灵组

·在刚完成的案例中,图像加载、位置变化、绘制图像 都需要程序员编写代码分别处理

·为了简化开发步骤,pygame 提供了两个类

  1. pygame.sprite.Sprite——存储图像数据image 和位置rect 的对象
  2. pygame.sprite.Group

简单一点来说:精灵和精灵组,就是为了方便程序员在开发项目时,代码太多,过于繁琐,可以使我们开发时,更加有效率?

5.2? 派生精灵子类

  1. 新建plane_sprites.py文件
  2. 定义GameSprite继承自pygame.sprite.Sprite

注意:

·如果一个类的父类不是 object

·在重写初始化方法时,一定要先 super() 一下父类__init__方法

·保证父类中实现的__init__代码能够被正常执行

属性

·image精灵图像,使用 image_name加载

·rect精灵大小,默认使用图像大小

·speed精灵移动速度,默认为1

方法

·update每次更新屏幕时在游戏循坏内调用

??让精灵组的 self.rest.y += self.speed

提示

·image 的 get_rect()方法,可以返回pygame.Rect(0, 0, 图像宽, 图像高)的对象

?下面通过这个类图来进行操作:

?

代码:?

import pygame


class GameSprite(pygame.sprite.Sprite):
    """飞机大战游戏精灵"""

    def __init__(self, image_name, speed=1):

        # 调用父类的初始化方法
        super().__init__()

        # 定义对象的属性
        self.image = pygame.image.load(image_name)
        self.rect = self.image.get_rect()
        self.speed = speed

    def update(self):

        # 在屏幕的垂直方向上移动
        self.rect.y += self.speed

5.3? ?使用游戏精灵 和精灵组创建敌机

需求

·使用刚刚派生的 游戏精灵和精灵组 创建敌机,并且实现敌机动画

步骤

1.使用 from 导入 plane_sprites模块

·from 导入的模块可以直接使用

·import 导入的模块需要通过 模块名. 来使用

2.在游戏初始化创建精灵对象和精灵组对象

3.在游戏循环中 让精灵组 分别调用 update() 和 draw(screen)方法

职责

精灵:

·封装 图像image、位置rect 和速度speed

·提供 update()方法,根据游戏需求,更新位置rect

精灵组:

·包含多个精灵对象

·update方法,让精灵组中所有的精灵调用update方法更新位置

·draw(screen)方法,在screen上绘制精灵组中所有的精灵

操作:

把之前监听事件的代码复制过来:

在箭头这里添加代码,导入精灵组?

接下来在游戏循环上方,准备写入代码

?

创建敌机的精灵和精灵组

但是要想屏幕出现敌机的动画,需要在游戏循环中,用精灵组调用draw 方法

?代码:

import pygame
from plane_sprites import *


pygame.init()

# 创建游戏的窗口
screen = pygame.display.set_mode((480, 700))

# 绘制背景图像
# 1.加载图像数据
background = pygame.image.load("./images/background.png")
# 2.blit方法 绘制图像
screen.blit(background, (0, 0))


# 绘制英雄飞机
hero = pygame.image.load("./images/me1.png")
screen.blit(hero, (200, 500))

# 可以在所有的绘制工作完成之后,同意调用update方法
pygame.display.update()

# 创建时钟对象
clock = pygame.time.Clock()

# 1.定义一个Rect 记录飞机的初始位置
hero_rect = pygame.Rect(150, 300, 102, 126)


# 创建敌机的精灵
enemy = GameSprite("./images/enemy1.png")

# 创建敌机的精灵组
enemy_group = pygame.sprite.Group(enemy)



# 游戏循环 -> 意味着游戏正式开始
while True:
    # 可以指定循环体内部的代码执行的频率
    clock.tick(60)

    # 监听事件
    for event in pygame.event.get():

        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("退出游戏")

            # quit 卸载所有的模块
            pygame.quit()

            # exit() 直接终止当前正在执行的程序
            exit()
    # 2.修改飞机的位置
    hero_rect.y -= 1

    # 判断飞机的位置,y<=0 飞机出现在屏幕下方
    if hero_rect.y <= 0:
        hero_rect.y = 700
    # 3.调用blit方法绘制图像
    screen.blit(background, (0, 0))
    screen.blit(hero, hero_rect)

    # 让精灵组调用两个方法
    # update方法
    enemy_group.update()

    # draw 方法
    enemy_group.draw(screen)

    # 4.调用update方法更新显示
    pygame.display.update()

pygame.quit()

输出结果:

?

扩展:

精灵组里面是可以包含多个精灵的,所以就可以多设置一些敌机

?注(后面的2 是敌机移动的速度)

输出结果:


总结

关于飞机大战,需要期提前储备的知识点,前期大概就是这些了。

后续就会开始更新飞机大战一步一步的制作,因为是新手,所以更新的比较多,也是为了自己能够方便理解每一步。后面更新的时候,内容中间还会插入一些及时的小知识

  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-22 21:11:19  更:2022-10-22 21:11:47 
 
开发: 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年11日历 -2024/11/15 7:07:52-

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