13. 精灵动画Sprite和SpriteSequence的基本使用

news2024/11/25 0:33:08

1. 说明:

在unity二维游戏开发中,有一种精灵类的玩家角色,通过一系列动作的静态图片可以合成该精灵的某一个动作。在QML当中也有一个控件可以实现这种精灵类动画的制作,主要使用到三个控件:SpriteSpriteSequenceAnimatedSprite
案例效果展示:

精灵动画

2. 基本属性介绍:

2.1 SpriteSequence:

currentSprite : string(当前精灵动画的名称)
goalSprite : string(目标精灵动画)
interpolate : bool(是否开启插值运算,默认为true,开启后可能会造成重影)
running : bool(是否执行动画,默认为true)
sprites : list<Sprite>(精灵动画集合) 

2.2 Sprite

name: (指定当前动画的名称)
source: (指定精灵图片源)
frameX: (当前动画起始帧的x坐标) 
frameY: (当前动画起始帧的y坐标)
frameCount: (指定当前动画需要帧数,如果有多帧,会以frameWidth和frameHeight的步长依次从左到右,从上到下滑动取出图片素材中对应宽高的图像作为当前帧)
frameWidth: (每一帧图像的宽度)
frameHeight: (每一帧图像的高度)
frameDuration: (每一帧的持续时间,时间到达后过渡到下一帧)
to: {"still":1, "blink":0.1, "floating":0}(设置过渡到下一个精灵动画的名称和对应权重(概率))

2.3 AnimatedSprite

如果在一系列的帧图片中没有系列动作之间的切换(比如跑步 --> 走路),仅仅只是每一帧图片之间的顺序播放,这种简单的过渡,使用AnimatedSprite这一个控件即可完成。

width: 一般和精灵图像宽度相同
height: 一般和精灵图像高度相同
source: (指定精灵图片源)
frameX: (当前动画起始帧的x坐标) 
frameY: (当前动画起始帧的y坐标)
frameCount: (该动画需要的总帧数-->会从第一帧开始循环滑动,找到frameCount个图像帧进行播放)
frameSync: (帧同步)
frameWidth: (图像帧宽度,一般和高度相同)
frameHeight: (图像帧高度,一般和宽度相同)
loops: (指定循环播放的次数)

3. 使用案例:

3.1 使用Sprite和SpriteSequence:

import QtQuick 2.2

Item {
    width: 320; height: 480
    Rectangle{
        id:bg
        anchors.fill: parent
        color: Qt.rgba(0,0,0,0.7)
    }

    MouseArea {
        onClicked: anim.start();
        anchors.fill: parent
    }
    SequentialAnimation {
        id: anim
        ScriptAction {
            script: image.goalSprite = "falling"; //在此处指定后,动画会无视过渡权重,以最短的路径从第一个sprite动画开始,一直到达目标动画
        }
        NumberAnimation {
            target: image
            property: "y"
            to: 480
            duration: 12000
        }
        ScriptAction {
            script: {
                image.goalSprite = ""
                image.jumpTo("still");//jumpTo()函数会让动画立即直接跳转到目标动画,中间不会再执行其它动画
            }
        }
        PropertyAction {
            target: image
            property: "y"
            value: 0
        }
    }
    SpriteSequence {
        id: image;
        width: 256; height: 256//尺寸大小应和精灵尺寸保持一致
        anchors.horizontalCenter: parent.horizontalCenter
        interpolate: false//如果设置为true,则每帧之间进行更新时会进行插值运算,可能会造成变换重影
        goalSprite: ""

        //静止站立
        Sprite{
            name: "still"; //指定当前动画的名称
            source: "BearSheet.png"
            frameCount: 1; //指定当前动画需要帧数,如果有多帧,会以frameWidth和frameHeight的步长依次从左到右,从上到下滑动取出图片素材中对应宽高的图像作为当前帧
            frameWidth: 256;
            frameHeight: 256
            frameDuration: 100//每一帧的持续时间,时间到达后过渡到下一帧
            to: {"still":1, "blink":0.1, "floating":0}//设置过渡到下一个精灵动画的名称和对应权重(概率)
        }
        //眨眼
        Sprite{
            name: "blink"; source: "BearSheet.png"
            frameCount: 3; frameX: 256; frameY: 1536
            frameWidth: 256; frameHeight: 256
            frameDuration: 100
            to: {"still":1}
        }
        //撑伞旋转
        Sprite{
            name: "floating"; source: "BearSheet.png"
            frameCount: 9; frameX: 0; frameY: 0
            frameWidth: 256; frameHeight: 256
            frameDuration: 160
            to: {"still":0, "flailing":1}
        }
        //丢伞伸展
        Sprite{
            name: "flailing"; source: "BearSheet.png"
            frameCount: 8; frameX: 0; frameY: 768
            frameWidth: 256; frameHeight: 256
            frameDuration: 160
            to: {"falling":1}
        }
        //伸展漂浮
        Sprite{
            name: "falling"; source: "BearSheet.png"
            frameCount: 5; frameY: 1280
            frameWidth: 256; frameHeight: 256
            frameDuration: 160
            to: {"falling":1}
        }
    }
}

其中用到的精灵素材图像BearSheet.png如下图所示:
在这里插入图片描述

3.2 使用AnimatedSprite:

import QtQuick 2.2

Item {
    width: 320; height: 480

    AnimatedSprite {
        id: sprite;
        anchors.centerIn: parent
        width: 170; height: 170
        source: "speaker.png"
        frameCount: 60;
        frameSync: true
        frameWidth: 170;
        frameHeight: 170
        loops: 2
    }

    MouseArea {
        anchors.fill: parent
        acceptedButtons: Qt.LeftButton | Qt.RightButton
        onClicked: {
            if (!sprite.running) sprite.start();
            if (!sprite.paused) sprite.pause();
            if ( mouse.button == Qt.LeftButton ) {
                sprite.advance(1);
            } else {
                sprite.advance(-1);
            }
        }
        onWheel: {
            if(wheel.angleDelta.y > 0){
                sprite.advance(1)
            }if(wheel.angleDelta.y < 0){
                sprite.advance(-1)
            }
        }
    }
}

其中使用到的素材图像speaker.png如下图所示:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/627980.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文解释python中的实例方法,类方法和静态方法作用和区别是啥?该如何使用

我们都知道 &#xff0c;python类中有三种常见的方法 &#xff0c;分别是实例方法 &#xff0c;类方法和静态方法 。那么这几个方法到底有什么作用 &#xff1f; 它们之间有什么区别 &#xff1f;该如何使用 &#xff1f; 带着这些问题 &#xff0c;下面我们就来了解下这三种方…

windows平台python脚本执行环境搭建笔记

1.python脚本环境下载 这里是原始发布源&#xff1a; https://www.python.org/downloads/release/python-3114/https://www.python.org/downloads/release/python-3114/安装时记得添加进系统path&#xff0c;这样你可以随时调用python环境。 2.扩展模块的安装 step1.找到py…

35款优秀的 SpringBoot/SpringCloud 开源项目,开发脚手架,总有一款适合你...

简介 SpringBoot 是一个非常流行的 Java 框架&#xff0c;它可以帮助开发者快速构建应用程序。他不仅继承了 Spring 框架原有的优秀特性&#xff0c;而且还通过简化配置来进一步简化了 Spring 应用的整个搭建和开发过程。 最近&#xff0c;小编蹲点各大开源网站、社区等&#x…

iOS App的打包和上架流程

转载&#xff1a;iOS App的打包和上架流程 - 掘金 1. 创建账号 苹果开发者账号几种开发者账号类型 个人开发者账号 费用&#xff1a;99 美元/年&#xff08;688.00元&#xff09;协作人数&#xff1a;仅限开发者自己不需要填写公司的邓百氏编码&#xff08; D-U-N-S Number…

源码分析spring容器启动销毁资源

文章目录 一、InitializingBean二、SmartInitializingSingleton三、PostConstruct四、DisposableBean五、PreDestroy六、BeanPostProcessor七、ApplicationContextAware八、Bean初始化销毁过程 spring项目启动时&#xff0c;在bean的生命周期内&#xff0c;可以添加一些前置、后…

ATE测试工程师的前景怎么样?能转DFT工程师吗?

最近后台不少同学私信想要咨询ATE这个岗位&#xff0c;想了解这个岗位的薪资&#xff0c;前景&#xff0c;以及相关的技能&#xff0c;下面就来一起了解一下~ 什么是ATE&#xff1f; ATE是&#xff08;Automatic Test Equipment&#xff09;的缩写&#xff0c; 于半导体产业意…

OOD 使用基于提示的特征映射生成用于视频异常检测

paper link 本文提出了使用提示引导特征映射的生成式视频异常检测框架&#xff0c;作者来自中山大学&#xff0c;文章发表在cvpr2023 作者首先分析了现有方法并指出当前面临的两个问题 两个关键挑战 大多数视频异常检测方法通过在训练阶段学习正常事件的分布,并在测试阶段检…

别找了!前端那些好用的网站都在这里了!【文末送书】

&#x1f340;前言 好用的网站千千万万&#xff0c;如果你还发现好用的网站&#xff0c;欢迎在评论区中留言分享&#x1f601;&#xff0c;赠书活动在文末哟&#xff0c;中奖者可以从给出的五本书中任意挑选自己喜欢的那本 文章目录 &#x1f340;前言 &#x1f340;一、渐变…

简化 Hello World:Java 新写法要来了

OpenJDK 的 JEP 445 提案正在努力简化 Java 的入门难度。 这个提案主要是引入 “灵活的 Main 方法和匿名 Main 类” &#xff0c;希望 Java 的学习过程能更平滑&#xff0c;让学生和初学者能更好地接受 Java 。 提案的作者 Ron Pressler 解释&#xff1a;现在的 Java 语言非常…

快速上手Flutter

目录 一、Flutter介绍 1.高效开发 2.优异的性能 3.较低的开发成本 4.社区活跃 二、Flutter使用 1.Dart 语言 2.什么是Dart语言 3.Flutter 组件库 4.Layout 布局 5.Flutter 工具 6.Flutter社区 三、Flutter使用技巧 四、总结 一、Flutter介绍 Flutter是谷歌的移动…

[CKA]考试之节点维护-指定 node 节点不可用

由于最新的CKA考试改版&#xff0c;不允许存储书签&#xff0c;本博客致力怎么一步步从官网把答案找到&#xff0c;如何修改把题做对&#xff0c;下面开始我们的 CKA之旅 题目为&#xff1a; Task 将k8s-node1节点设置为不可用&#xff0c;然后重新调度该节点上的所有Pod 注…

优维低代码实践:模板

优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。 优维…

如何提高测试用例的编写效率?

1、提高测试覆盖率 我们通过对测试用例的评审&#xff0c;进一步完善测试覆盖率。在评审过程中&#xff0c;不同的评审专家看待问题的角度不完全一致&#xff0c;因此我们需要充分考虑测试方法&#xff0c;扩充测试用例的全面性&#xff0c;确保基本功能和核心功能的覆盖率。 如…

操作系统课后题答案(费翔林)

仅为老师布置的课后题答案&#xff0c;仅供学习参考 习题2

数据的存储方式(Parquet、ORC)

文章目录 数据的存储方式按行存储按列存储 Parquest文件布局概念并行处理的单元 配置Row Group Size 行组的大小Data Page Size 数据页的大小 元数据数据页Hive下的Parquet实验Parquet简单工具的使用支持的组件 Apache ORC文件布局Stripe Hive下的Parquet实验ORC简单工具的使用…

NLP——part of speech (POS)中的隐马尔可夫模型 + Viterbi 算法

文章目录 POS隐马尔可夫模型计算简介转移概率矩阵&#xff08;Transition matrix&#xff09;观察矩阵&#xff08;Observation / emission Matrix&#xff09;预测 predictionVitervi 算法练习 POS 词性标注&#xff08;Part-of-Speech Tagging&#xff0c;POS Tagging&#…

【AUTOSAR-Code调试】:Wdog

【AUTOSAR-Code调试】&#xff1a;Wdog DavinciCfg 生成文件添加进GreenHill编译添加.c文件添加.h文件路径 接上篇【Davinci开发】&#xff1a;Wdg配置 DavinciCfg 生成文件添加进GreenHill编译 添加.c文件 添加.h文件路径

模拟实现 Spring AOP

文章目录 前言Spring AOPSpring AOP 概述Spring IoC 技术难点Spring IoC 框架思考需求分析 Spring IoC 技术难点实现模拟实现 AOP 具体代码 前言 Spring 是一种 Java 开发框架&#xff0c;其主要功能有两个&#xff1a;IoC(DI)和AOP。《模拟实现Spring AOP》是本人的一个编程训…

基于SSM的校园二手交易平台

一、源码获取&#xff1a; 链接点击直达&#xff1a;下载链接 二、系统架构&#xff1a; 使用技术&#xff1a; SpringSpringMVCMybatis 三、系统需求分析&#xff1a; 在如今的大学校园中&#xff0c;伴随着学生的购买能力的提高和每年的升学和毕业&#xff0c;存在许多…

调用阿里云API实现证件照生成

目录 1. 作者介绍2. 算法介绍2.1 阿里云介绍2.2 证件照生成背景2.3 图像分割算法 3.调用阿里云API进行证件照生成实例3.1 准备工作3.2 实验代码3.3 实验结果与分析 参考&#xff08;可供参考的链接和引用文献&#xff09; 1. 作者介绍 王逸腾&#xff0c;男&#xff0c;西安工…