pygame的动图实现方法

2023-11-08

最近在完善一个飞机大战的小游戏,一比一按照书上做出来的有些简陋,所以自己往里面加了不少元素。其中一项便是子弹的动态效果,但是pygame不支持gif的动图(可以导入,但不会动),那么该怎么办呢?

我们知道,动图的原理其实就是把一组图片快速播放。按照这个思路,我们可以试着把gif拆解成一张张的png,再将它们导入游戏快速轮换即可。

gif的拆解可以通过PS来完成,在CSDN上有不少教程,我也是从这里学到的,就不赘述了。关键的一步在于同时导入多张图片并轮流播放:

image_list = ['index0001', 'index0002', ...]
frame_list = []
    for i in image_list:
        ii = pygame.image.load(f'../images/gif/{i}.png')
        frame_list.append(ii)

上面是导入的代码。image_list里是你要导入的gif的每一帧的图片,有时候一个gif能够拆出几十张乃至上百张图片,我们肯定不可能把名字一个个手打进去。不过一般用PS拆解出来的png都会带有统一的名称前缀,如index0001,index0002等等。假设有60张图,用一个for循环可以轻松解决:

image_list = []
for i in range(0,61):
    name = f'index00{i}'
    image_list.append(name)
# 前十个数最后输出是index001,index002...少一个零,别忘记改

书接上文,通过又一个for循环将每个pygame.image.load()存储到frame_list列表里面,方便后续调用。图片轮换的代码如下:

self.images = image_list
self.image = self.images[0]
self.rect = self.image.get_rect()
self.image_index = 0

    def bullets_draw(self):
        """轮换"""
        if self.image_index < len(self.images) - 1:
            self.image_index += 1
        else:
            self.image_index = 0
        self.image = self.images[self.image_index]
        self.screen.blit(self.image, self.rect)

self.image设置一下第一帧,后面用一个image_index充当列表索引,以实现按顺序播放的效果。pygame绘制屏幕的速度很快,加载这些图片也就是一瞬间的事。

以上就是个人在初学pygame时的一点心得,希望能帮到有需要的人。毕竟我当时搜攻略搜了好久也没找到......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pygame的动图实现方法 的相关文章

  • 尽管极其懒惰,但如何在 Python 中模拟 IMAP 服务器?

    我很好奇是否有一种简单的方法来模拟 IMAP 服务器 例如imaplib模块 在Python中 without做很多工作 是否有预先存在的解决方案 理想情况下 我可以连接到现有的 IMAP 服务器 进行转储 并让模拟服务器在真实的邮箱 电子
  • Python、Tkinter、更改标签颜色

    有没有一种简单的方法来更改按钮中文本的颜色 I use button text input text here 更改按下后按钮文本的内容 是否存在类似的颜色变化 button color red Use the foreground设置按钮
  • 如何在Windows上模拟socket.socketpair

    标准Python函数套接字 套接字对 https docs python org 3 library socket html socket socketpair不幸的是 它在 Windows 上不可用 从 Python 3 4 1 开始 我
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 如何使用装饰器禁用某些功能的中间件?

    我想模仿的行为csrf exempt see here https docs djangoproject com en 1 11 ref csrf django views decorators csrf csrf exempt and h
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 如何将 numpy.matrix 提高到非整数幂?

    The 运算符为numpy matrix不支持非整数幂 gt gt gt m matrix 1 0 0 5 0 5 gt gt gt m 2 5 TypeError exponent must be an integer 我想要的是 oct
  • Numpy 优化

    我有一个根据条件分配值的函数 我的数据集大小通常在 30 50k 范围内 我不确定这是否是使用 numpy 的正确方法 但是当数字超过 5k 时 它会变得非常慢 有没有更好的方法让它更快 import numpy as np N 5000
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 在Python中重置生成器对象

    我有一个由多个yield 返回的生成器对象 准备调用该生成器是相当耗时的操作 这就是为什么我想多次重复使用生成器 y FunctionWithYield for x in y print x here must be something t
  • 在 Pandas DataFrame Python 中添加新列[重复]

    这个问题在这里已经有答案了 例如 我在 Pandas 中有数据框 Col1 Col2 A 1 B 2 C 3 现在 如果我想再添加一个名为 Col3 的列 并且该值基于 Col2 式中 如果Col2 gt 1 则Col3为0 否则为1 所以
  • 对输入求 Keras 模型的导数返回全零

    所以我有一个 Keras 模型 我想将模型的梯度应用于其输入 这就是我所做的 import tensorflow as tf from keras models import Sequential from keras layers imp
  • 在 Python 类中动态定义实例字段

    我是 Python 新手 主要从事 Java 编程 我目前正在思考Python中的类是如何实例化的 我明白那个 init 就像Java中的构造函数 然而 有时 python 类没有 init 方法 在这种情况下我假设有一个默认构造函数 就像
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • (Java)leetcode-1325 Delete Leaves With a Given Value(删除给定值的叶子节点)

    题目描述 给你一棵以 root 为根的二叉树和一个整数 target 请你删除所有值为 target 的 叶子节点 注意 一旦删除值为 target 的叶子节点 它的父节点就可能变成叶子节点 如果新叶子节点的值恰好也是 target 那么这
  • 苹果11文件夹怎么连接服务器,(11)文件服务器

    要求 编写一个 HTTP 文件 服务器 它用于将每次所请求的文件返回给客户端 服务器需要监听所提供的第一个命令行参数所制定的端口 同时 第二个会提供给程序的参数则是所需要响应的文本文件的位置 在这一题中必须使用fs createReadSt
  • 什么是配置环境?如何配置环境?回答很多计算机入门者都会遇到的问题

    什么是配置环境 如何配置环境 回答很多计算机入门者都会遇到的问题 1 前言 编程入门时往往会遇到各种需要配置环境变量的场景 比如刚开始学习python java等 我也和你们一样经历过在网上找各种配环境的教程 然后按部就班地操作 但重复进行
  • 【卡尔曼滤波器】递归算法

    大家好 我是小政 最近在学习卡尔曼滤波 本篇文章记录一下我学习的卡尔曼滤波器中的递归算法 通过举例子让大家更加清晰理解递归到底是什么 希望与同是卡尔曼滤波研究方向的同学进行一些交流 递归算法 1 为什么要用卡尔曼滤波器 2 公式推导 3 举
  • java.lang.OutOfMemoryError: Java heap space .

    java lang OutOfMemoryError Java heap space 解决方案 1 进入eclipse界面中的servers选项卡 右击 工程配置的tomcat项 单击 Open 如图 2 单击 Open launch co
  • c语言课程设计籍贯流程图,学生籍贯信息记录簿(C语言课程设计)教程解读.doc

    计算机科学与技术系 课程设计报告 2012 2013 学年第1学期 课程C语言课程设计课程设计名称学生籍贯信息记录簿设计学生姓名学号专业班级指导教师 目录 一 绪言 需求分析 二 系统设计 一 设计思想 二 源程序设计 三 设计表示 三 系
  • Linux中的线程(一)-- 线程的创建

    什么是线程 Linux 中的线程被称为 轻量级进程 Lightweight Process LWP 它是在进程内部运行的一种 子进程 与传统的进程不同 线程共享相同的虚拟地址空间和其他资源 例如打开的文件 信号处理程序和用户 ID 等 线程
  • hello world C C++ Python Java Go

    碎碎念念 hello world是程序设计语言必打 入门小白都会在学习之初来这么一手 C include
  • 项目介绍star原理_简历中、面试中,怎么描述你的工作/项目经历?

    简历中一般会包括工作经历和项目经历这两个模块 面试官也会注重针对这两个模块进行提问 对于这两部分 我们都会面临一个如何描述与表达的问题 一 如何写好简历中的工作 项目经历 1 工作 项目经历描述法则 STAR法则 STAR法则的四个关键词的
  • 云监控系统 HertzBeat v1.1.0 发布,一条命令开启监控之旅!

    官网 hertzbeat com tancloud cn 大家早上好 HertzBeat v1 1 0 发布啦 这个版本我们支持了SNMP协议 并使用SNMP协议监控支持了windwos操作系统的应用监控 SNMP协议支持自定义监控 欢迎贡
  • java的imageicon用法详解_javaimageicon用法

    import java awt BorderLayout import java awt GridLayout import java awt event ActionEvent import javax swing ImageIcon i
  • Media Player播放视频只有声音没有图像

    今天在播放学生信息管理系统的时候发现视频播放后只有声音 却没有图像 这是什么原因呢 一 什么是media player播放器 Windows Media Player 是微软公司出品的一款播放器 通常简称 WMP 通常在Windows操作系
  • 系统架构设计专业技能 · 软件工程之软件测试与维护

    系列文章目录 系统架构设计专业技能 网络规划与设计 三 系统架构设计师 系统架构设计专业技能 系统安全分析与设计 四 系统架构设计师 系统架构设计高级技能 软件架构设计 一 系统架构设计师 系统架构设计高级技能 系统质量属性与架构评估 二
  • PostGreSQL数据库有的为啥找不到数据类型(比如Double)

    今天用NavCate建立PostGreSql建标 使用Double发现居然没有这个类型 百度各种博客都表示有Double类型 但是我测试就没了 后来发现 这里面居然有别名 名字 别名 描述 bigint int8 有符号 8 字节整数 bi
  • 蓝牙PHY6222添加OTA升级功能

    主要步骤 1 代码添加 ota app service 2 keil软件添加ota app代码 3 烧录软件添加ota设置 4 手机ota app升级 准备 奉加微电子官网下载6222的代码SDK V3 0以上 下载官网的PhyPlusKi
  • 谷歌浏览器打开时为桔梗网

    右击 gt 打开文件所在位置 然后将桌面的快捷方式删除 重新创建快捷方式
  • MySQL Server最佳实践

    备份 backups 监控 moitoring 配置 configuration 模式和查询 schema and queries 系统 system 其他 other Backups 备份 做数据库备份 在系统改变时做数据库备份例如升级前
  • 跨域问题详解及解决方案

    文章目录 一 前言 二 什么是跨域问题 三 为什么会出现跨域问题 四 什么情况下会出现跨域 五 如何解决跨域问题 5 1 使用 CrossOrigin注解 5 2 使用WebMvcConfigurer 5 3 使用Filter 六 代码示例
  • Java连接Oracle数据库开发银行管理系统【三、实现篇】

    说明 里面的主要代码都加的有注释部分 所以代码显得很长 如果有错误的地方 谢谢指出 注意需要导入数据库jar包 1 com ll test包下面类 1 1 test类 package com ll test import com ll se
  • pygame的动图实现方法

    最近在完善一个飞机大战的小游戏 一比一按照书上做出来的有些简陋 所以自己往里面加了不少元素 其中一项便是子弹的动态效果 但是pygame不支持gif的动图 可以导入 但不会动 那么该怎么办呢 我们知道 动图的原理其实就是把一组图片快速播放