Spine深入学习 —— 换装

news2024/10/6 14:35:38

Spine深入学习————换装

数据对象和实例对象的关系与区别

数据对象是无状态的,可在任意数量的骨架实例间共用。有对应实例数据的数据对象类名称以“Data”结尾,没有对应实例数据的数据对象则没有后缀,如附件、皮肤及动画。

实例对象有许多属性与数据对象相同。数据对象中的属性代表装配姿势,通常不会改动。实例对象中的相同属性表示播放动画时该实例的当前姿势。每个实例对象保有一个其数据对象参考,用于将实例对象重置回装配姿势。

例如,SkeletonData是数据对象,而Skeleton是实例对象。同样的,Bone实例对象会有对应的BoneData,Slot实例对象会有对应的SlotData等。

整体渲染流程

在这里插入图片描述
在这里插入图片描述

思路

参考:https://segmentfault.com/a/1190000040116516?utm_source=sf-similar-article

每次插槽渲染的时候,都会根据当前slot的attachmentName,去当前skin中获取到对应的附件。

skin是附件查询的映射表,因此只需要到当前的skin中,,去更新对应的附件,即可以实现换装功能

下图来自厘米秀的思路

在这里插入图片描述

slot1来源于slotData1,初始化的时候会读取slotData1中的attachmentName,去skin.attachments中查找对应的附件实例,这里每一项的index都是一一对应的,skin.attachments数组中的第一项对应slotData1,检索到对应的附件实例后赋值给对应的slot实例,等待被渲染层渲染。

需要更新的是slot中的对应附件,而附件检索来自于skin,因此我们实际上需要更新的是skin上对应的附件查询表,将对应层级的附件实例更新为新的装扮生成的实例

如何生成对应的消费素材资源,生成对应的附件实例,skeletonJson是spine核心库定义的用于解析JSON的解析器,生成对应的skeletonData,这一过程中就包括构造skin。

那么思路就可以是定义loader加载素材资源,处理成对应的资源格式,经过textureAtlas的处理,构造出AtlasAttachmentLoader给skeletonJson调用,有了loader,提供json,这时候skeletonJson便可以解析后构造出对应的附件。

那么流程如下:

  1. 自定义loader加载素材资源,处理成对应的资源格式给下层消费;
  2. 构造AtlasAttachmentLoader给skeletonJson调用;
  3. 扩展skeletonJson底层原型链方法,生成附件实例,将新的附件实例更新到当前skin对应的层级位置上。

局部换装

局部换装——附件换装

spine附件换装则是指在spine工程内针对某一部位插槽SlotA创建皮肤(记为SkinPart)并记录皮肤占位符,运行时通过查询局部皮肤SkinPart中的附件(记为attachmentPart),使用局部皮肤对应位置的附件attachmentPart替换全身皮肤中SlotA下的附件(attachmentFull)

/**
    * @param skinName 要替换的部件皮肤名称
    * @param slotName 要替换的部件的插槽名称
    * @param targetAttaName  Spine中皮肤占位符的名字
 */
changeSlot(skinName: string, slotName: string, targetAttaName: string) {
    //查找局部皮肤
    let skeletonData = this.role.skeletonData.getRuntimeData();
    let targetSkin: sp.spine.Skin = skeletonData.findSkin(skinName);

    //查找局部皮肤下的插槽与附件
    let targetSkinSlotIndex = skeletonData.findSlotIndex(slotName);
    let atta = targetSkin.getAttachment(targetSkinSlotIndex, targetAttaName);

    //查找全身皮肤下的插槽
    let curSlot = this.role.findSlot(slotName);

    //替换全身皮肤插槽的附件
    curSlot && curSlot.setAttachment(atta);
}
局部换装——外部贴图

局部换装——外部贴图,顾名思义,就是不使用spine导出图集中贴图,而是使用cocos creator的texture资源进行局部换装。当前一个部位使用的图片和将要换上去的图片都没有蒙皮变形,或者两张图片可以使用同一个蒙皮,就可以直接使用外部图片进行换装。

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

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

相关文章

【FMC140】 基于VITA57.4标准的双通道5.2GSPS(或单通道10.4GSPS)射频采样FMC+子卡模块

板卡概述 FMC140是一款具有缓冲模拟输入的低功耗、12位、双通道(5.2GSPS/通道)、单通道10.4GSPS、射频采样ADC模块,该板卡为FMC标准,符合VITA57.1规范,该模块可以作为一个理想的IO单元耦合至FPGA前端,8通道…

【嵌入式Linux开发一路清障-连载04】虚拟机VirtualBox7.0安装Ubuntu22.04后挂载Windows平台共享文件夹

虚拟机安装Ubuntu22.04后挂载Windows平台共享文件夹 障碍07-虚拟机VirtualBox7.0完装完Ubuntu22.04后,无法成功挂载Windows平台中共享文件夹,无法访问电脑中的各类重要文件,我该怎么办?一、问题的模样:VirtualBox7.0设…

Python异常处理:try...except语句

Python是一门非常灵活且易于学习的编程语言,在日常开发中被广泛应用。然而,由于各种原因,我们的代码可能会出现异常情况,例如输入错误、文件读写异常等等。Python异常处理是Python中重要的一部分,为了保证程序的稳定性…

IPv6地址介绍

当前我国的网络正在快速向IPv6升级中,从网络基础设施如运营商骨干网、城域网,到互联网服务商如各类云服务,以及各类终端设备厂商如手机、电脑、路由器、交换机等。 一、网络IP地址 IP地址是英文Internet Protocol的缩写,是网络之…

Fiddler 抓包高级进阶

Fiddler 抓包高级进阶 安装直接下载我附件提供的,中文版的,可以直接使用。如果不能使用就安装.NET 框架。 HTTPS配置工具》》选项: https 都配置上。 配置HTTS证书,然后动作》》 Trust Root Certificate 。 一路确认或者 是,就行了。

【C++】程序题( STL标准模板库)

🎃个人专栏: 🐬 算法设计与分析:算法设计与分析_IT闫的博客-CSDN博客 🐳Java基础:Java基础_IT闫的博客-CSDN博客 🐋c语言:c语言_IT闫的博客-CSDN博客 🐟MySQL&#xff1a…

dbCAN碳水化合物酶基因数据库及run_dbCAN4工具安装配置及使用

dbCAN(碳水化合物酶基因数据库)是一个专门用于在基因组中预测碳水化合物酶基因的在线工具。它基于隐马尔可夫模型(HMM)和BLAST搜索,能够在蛋白质序列中识别和注释不同类型的碳水化合物酶基因,包括纤维素酶、…

Flutter App混淆加固、保护与优化原理

目录 引言 一、混淆原理 二、实现混淆 2.1、混淆Dart代码 2.2、混淆Android原生代码 三、优化应用程序包体积 3.1、移除未使用的资源 3.2、压缩图片资源 四、提高反编译难度 4.1、混淆字符串 代码加固 五、常见问题与解决方案 六、总结 引言 在移动应用程序开发中&…

【Vue】【uni-app】实现工单列表项详情页面

这次主要实现的是一个工单详情页面 从工单列表项中点击详情 跳转到工单详情页面&#xff0c;这个详情页面就是这次我们要实现的页面&#xff0c;并可以通过点击这个关闭按钮返回到工单列表页面 首先是在我们原有的工单列表页面的按钮增加一个点击跳转 <button size"m…

支付宝蚂蚁庄园2023年12月1日小课堂问题今天正确答案是什么?通常来说榴莲的气味越浓郁说明?为什么冬天容易手脚冰凉?

问题&#xff1a;通常来说&#xff0c;榴莲的气味越浓郁说明&#xff1f; 选项&#xff1a;A、越成熟 B、越生涩 答案&#xff1a;越成熟 解析&#xff1a;榴莲都会有独特的香味,一般情况下,香味越浓郁就说明榴莲的成熟度越高,它的果肉会越香甜,吃起来会更美味。 问题&#…

【React-Router】导航传参

1. searchParams 传参 // /page/Login/index.js import { Link, useNavigate } from react-router-dom const Login () > {const navigate useNavigate()return <div>登录页<button onClick{() > navigate(/article?id91&namejk)}>searchParams 传参…

11.22 作业 select实现TCP并发客户端/poll实现TCP并发服务器

#include <myhead.h> #define SERIP "192.168.115.162" #define SERPORT 8888 #define CLIIP "192.168.115.162" #define CLIPORT 6666 int main(int argc, const char *argv[]) {//创建客户端用于通信的套接字int cfd socket(AF_INET,SOCK_STREAM,…

数据通信——OSPF路由控制实验

实验需求 我们采用OSPF完成路由的控制&#xff0c;首先连接如下拓扑&#xff1a; 所有设备均属于area 0&#xff0c;网段及环回口配置如上图所示。 实验目的&#xff1a;R4和R1的环回口通信路径为R4——R2——R1若R2出现问题&#xff0c;自动切换到R3路径。 实验配置 1&am…

ChatGPT 改 Bug 能力,惊呆我了!

ChatGTP 是全球公认的最强的 AI 模型&#xff0c;能做的事情太多了。。 对于程序员来说&#xff0c;ChatGPT 可以自动生成代码、代码补全、代码分析、编程语言转换、写 SQL、写程序等等&#xff0c;下面我给大家先简单演示几个。 1、代码生成 ChatGPT 可以根据程序员输入的指…

磁盘配额Quota案例,针对组,用户设置宽限期限,限制值的报表

目的与账号&#xff1a; 1.设计专题&#xff0c;五个人一组&#xff0c;账号分别是myquota1-myquota5,密码&#xff1a;password&#xff0c;初始用户组myquotagrp,其他默认。脚本如下 增加执行权限&#xff0c;运行 2&#xff09;实践quota1&#xff0c;文件系统支持 只针对…

对话特斯拉北美车主:FSD什么水平?深度用户解密V11

作者 |Amy 编辑 |德新 近期中国四部委联合印发通知&#xff0c;部署开展智能网联汽车准入和上路通行试点工作&#xff0c;要求具备量产条件L3、L4 级别智能网联车在限定区域内开展上路试点&#xff0c;并且首次明确事故责任判定。 通知下发后&#xff0c;市场传闻&#xff1a…

STM32_11(SPI)

一、SPI通信 SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线四根通信线&#xff1a;SCK&#xff08;Serial Clock&#xff09;、MOSI&#xff08;Master Output Slave Input&#xff09;、MISO&#xff08;Master Input Slav…

一个菜单两个二级路由的搭建

效果如下&#xff0c;而且这是最上方的菜单&#xff0c;需要进入以后重定向。 {path: /,name: HOME,component: ConsoleLayout, //这里也有router-viewmeta: {menu: false},redirect: {name: ManagerList},children: [{path: /rightsManage,name: RightsManage,component: () &…

21.Oracle的程序包(Package)

Oracle的程序包Package 一、Package的概述1、什么是Oracle11g的Package2、Package的作用是什么3、常见的系统内置Package 二、创建Package的相关语法1、Package的创建语法2、Package的删除3、具体案例4、Package的使用5、与Package相关的其他语法 三、常见内置程序包的使用1、…

什么是电子负载

电子负载也被称为电子负载器或电源模拟器用于模拟实际负载的设备&#xff0c;它能够吸收和消耗电能&#xff0c;就像真实的电子设备一样&#xff0c;电子负载的主要功能是测试电源、电池、发电机等电源设备的性能和可靠性。 电子负载的工作原理是通过内部的电力转换电路&#x…