python3.8.8 :pygame实现角色动画

这篇具有很好参考价值的文章主要介绍了python3.8.8 :pygame实现角色动画。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用途:通过不同的序列图片在界面上展示连贯的动画

结果如下:

pygame动画,pygame,python,开发语言

 参考文章:pygame之旅 - 知乎 (zhihu.com)

项目结构目录

pygame动画,pygame,python,开发语言

 角色类

import os
import pygame,sys
dir = "persent/magic/"

class Hero(pygame.sprite.Sprite):
    def __init__(self):
        super().__init__()
        self.kinds = ["attack","hit","idle","miss"]  # 角色的所有动作
        self.state = 'idle'   # 当前状态
        self.current_frame = -1  # 当前动作序列的到第几张
        self.current_image = None # 当前动作序列对应的图片
        self.all_frame = {}  # 所有的动作,表现为"动作名称":动作序列
        self.frames = []    # 当前动作序列
        self.last_updated = 0  #更新的时间


    # 设置绘制的主屏幕,上层传入
    def setScreen(self,screen):
        self.screen = screen

    #更新动作
    def update(self):
        self.handle_state()   # 切换动作
        self.animate()     # 连贯一个动作
        self.screen.blit(self.current_image,self.rect)# 绘制
    # 切换当前动作的序列帧
    def animate(self):
        now = pygame.time.get_ticks()
        if now - self.last_updated > 100:
            self.last_updated = now
            self.current_frame = (self.current_frame + 1) % len(self.frames)
            self.current_image = self.frames[self.current_frame]
    # 初始化时加载图片
    def load_image(self):

        listName = "hero"+str(self.ID)  # 人物文件夹名字
        for i in self.kinds:   # 任务文件夹下面的几个动作名字
            self.all_frame.setdefault(i,[])   # 设置"动作名":列表
            frames = os.listdir(dir+listName+'/'+i)  # 获取动作的所有图片名字
            for j in frames:  # 遍历所有图片
                filename = dir+listName+'/'+i+'/'+j  # 组装成对应可以读取名字
                print(filename)
                # 读取图片
                self.all_frame[i].append(
                    pygame.image.load(filename)
                )
        self.state = self.kinds[2]  # 将状态切换为idle
        self.handle_state()    # 更新对应序列
        self.current_frame = 0 # 重置当前帧
        self.current_image = self.all_frame.get('idle')[0]  # 设置当前图片
        self.rect = self.all_frame.get('idle')[0].get_rect() # 获取图片对应
        self.rect.midbottom = (100,100)# 设置图片大小
        # 设置图片位置
        self.rect.x = 100  
        self.rect.y = 100
    # 更换当前动作状态序列帧
    def handle_state(self):
        if self.state == 'idle':
            self.frames = self.all_frame.get("idle")
        elif self.state == "hit":
            self.frames = self.all_frame.get("hit")
        elif self.state == "miss":
            self.frames = self.all_frame.get("miss")
        elif self.state == "attack":
            self.frames = self.all_frame.get("attack")

    # ["attack","hit","idle","miss"] 改变角色状态
    def changeState(self,num:int):
        if num >0 and num<len(self.kinds):# 在规定的状态里面
            if self.state != self.kinds[num]:# 状态改变
                self.current_frame = 0
            self.state = self.kinds[num]  # 修改状态

角色生成类:


class heroProduct:
    def __init__(self,screen):
        self.screen = screen


    # 创建一个人物
    def createHero(self):
        hero = Hero()
        hero.setScreen(screen)
        hero.load_image()
        return hero

代码入口

import pygame
import persent.script.Heroproduct as Heroproduct
import persent.script.AbilityManage as AbilityManage


pygame.init()
pygame.display.set_caption("hight")  # 设置窗口名字
screen_width, screen_height = 560, 780   # 设置窗口大小
screen = pygame.display.set_mode((screen_width, screen_height))
clock = pygame.time.Clock()  # 设置时钟


heroproduct = Heroproduct.heroProduct(screen)

hero = heroproduct.createHero()
start = True
while start:
    clock.tick(60)
    hero.update()
    for event in pygame.event.get():  # 循环获取事件
        if event.type == pygame.QUIT:  # 若检测到事件类型为退出,则退出系统
            start = False
        if event.type == pygame.KEYDOWN:
            # 具体是哪一个按键的处理
            if event.key == pygame.K_0:
                hero.changeState(0)
            elif event.key == pygame.K_1:
                hero.changeState(1)
            elif event.key == pygame.K_2:
                hero.changeState(2)
            elif event.key == pygame.K_3:
                hero.changeState(3)
    pygame.display.update()  # 更新屏幕内容
pygame.quit()

结果如下:

pygame动画,pygame,python,开发语言

 发现出现问题,动画出现残影,看网上说需要先绘制背景,再绘制角色可以解决,随意填个颜色screen.fill(255)

while start:
    clock.tick(60)
    screen.fill(255)
    hero.update()
    pygame.display.update()  # 更新屏幕内容
    for event in pygame.event.get():  # 循环获取事件
        if event.type == pygame.QUIT:  # 若检测到事件类型为退出,则退出系统
            start = False
        if event.type == pygame.KEYDOWN:
            # 具体是哪一个按键的处理
            if event.key == pygame.K_0:
                hero.changeState(0)
            elif event.key == pygame.K_1:
                hero.changeState(1)
            elif event.key == pygame.K_2:
                hero.changeState(2)
            elif event.key == pygame.K_3:
                hero.changeState(3)

问题解决

pygame动画,pygame,python,开发语言文章来源地址https://www.toymoban.com/news/detail-742783.html

到了这里,关于python3.8.8 :pygame实现角色动画的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python 学习之路:python3中pygame解决中文显示

            这篇文章主要介绍python3中pygame解决中文显示问题,通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下。   1.实例代码展示: 2.实例运行效果: 3.路径和字体设置:         需要自己下载好字体,放置一个指定

    2024年02月11日
    浏览(30)
  • 解决python3.11.1不能安装pygame问题

    目前官网没有该版本的pygame安装包 直接使用  pip install pygame 安装会报错 查询资料发现只能安装预先版,使用  pip3 install pygame --pre 大面积报错,难受。。 考虑为网络因素,结合清华大学镜像源,使用 pip3 install pygame --pre -i https://pypi.tuna.tsinghua.edu.cn/simple/ 安装成功!附图,

    2024年02月12日
    浏览(42)
  • 使用pygame让方向键实现角色的移动和转向

    pygame小鱼 transform.flip(Surface,xbool,ybool)可以将图片进行翻转,返回一个新图像 Surface:需要翻转的图像 xbool:是否水平翻转,True/False ybool:是否垂直翻转,True/False

    2024年02月04日
    浏览(42)
  • 【还在传统绑骨骼动画?】让AI助力你实现2D游戏角色动画流程

    需要的知识 : 会调+chatGpt( 看小红书、抖音、B站、Youtube、Telegrame等等都行,别傻忽忽跑到知识星球被收割了,就是一帮割韭菜的。 )学会怎么结合这两款不同的AI先。 如果你对此文字生成图片嗤之以鼻的话,那还是自己手绘线稿吧。 画手问题的解决方案(我更喜欢

    2024年02月04日
    浏览(31)
  • Pygame 基础教程12: 使用 精灵(Sprite) 实现 帧动画(Animation)

    原文链接:https://xiets.blog.csdn.net/article/details/131395288 版权声明:原创文章禁止转载 专栏目录:Pygame 专栏(总目录) 精灵(Sprite) 表示游戏画面中基本的显示元素,前面所介绍的精灵虽然位置可以动态移动,但都是一张静态图片。游戏中还有许多动态的动画精灵,如一只飞翔的

    2024年01月17日
    浏览(44)
  • Unity之OpenXR+XR Interaction Toolkit实现 VR控制第一人称角色模型动画

    我们在开发VR项目时,有时会有第一人称视角的需求,即我们自己带上VR头显,能够看到自己的身体,如果模拟一些人物触电死亡,使用工具动画之类的需求,那么VR控制第一人称视角就比较实用了。 我们今天就来介绍一下如何实现VR设备控制第一人称: 1.角色手部跟随手柄移

    2024年02月09日
    浏览(32)
  • Maya角色跑步动画制作 │ 角色跑步动画案例(附资料)

    本文介绍角色跑步动画上半身动画的制作技巧,学习角色跑步肩部与胯部运动的动画制作技巧,如何制作角色头部的动画效果。如何实现手臂的跟随动画制作技巧。 01 角色跑步动画案例 **Step 01 **肩部胸腔运动正好与胯部运动呈相反方向,在时间线的第0帧和第16帧位置处加入

    2024年02月10日
    浏览(47)
  • 8.8 【C语言】动态内存分配与指向它的指针变量

    栈:全局变量和局部变量,全局变量是分配在内存中的静态存储区的,非静态的局部变量是分配在内存中的动态存储区的。 堆:数据临时存放在一个特别的自由存储区。 对内存的动态分配是通过系统提供的库函数来实现的,主要有malloc,calloc,free,realloc这四个函数。 1.用mallo

    2024年02月11日
    浏览(32)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(35)
  • 【Unity】为角色添加动画

     在Animations的AnimationClips文件夹下自己为角色创建一个文件夹 为角色添加Animator  然后选中上面创建的文件夹,拖动到上图中的Controller中 点击最上方任务栏的Window=Animation=Animation,这会弹出一个Animation窗口  该窗口存在时,点击想要添加动作的对象,即可查看其已有的动作

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包