【spine】原理介绍和程序实现

  突然间,微博上被@了,一看原来是之前的关于介绍 spine 的文章引起的。然后就是一阵惭愧,又开了一坑,然后就木有了。虽然,一直在研究 spine,但是的确没写下来相关的内容。于是,赶紧,补了一些内容。

  官网内容转发,没啥技术含量。我自己写的运行库也完成了,虽然还需要打磨,但是比官方的更符合2dx 的风格。做了许久之后,对 spine 的理解更深了一点,然后就胡乱介绍下设计思路和为什么这么做。

概念



先来介绍下 spine 中的一些术语和概念

  • Bone 骨骼

spine 是骨骼编辑器,所以骨骼是基础。每个骨骼都会有旋转,缩放,位移的属性。然后骨骼可以有子节点,最终形成了一个树型结构。可以对应2dx 里面的 node

  • Slot 插槽

骨骼上的一个挂载点。不是所有的骨骼上都能放置东西的,因为很多骨骼其实只参与计算,真正重要的骨骼,也就是需要挂载其他东西的骨骼上必须放置插槽。slot 只是用来标记特殊的骨骼位置,本身只有一个颜色属性,也可以说,重要的骨骼节点可以称为 slot。

  • Attachment 附件

挂在插槽上的内容,可以是图片,也可以是判定区域,只要是你能想到的东西,都可以当成附件。

  • Draw order 描画顺序

骨架上插槽的一个顺序列表。用来控制描画的先后顺序。

  • Animation 动画

基于时间轴的一个骨骼状态列表。

  • Skin 皮肤

一套附件的集合,类似于换装。

  • Bounding Box 边界框

用来指定骨骼上的边界的多边形的区域。

  • atlas 图集

贴图集合,小图片合并在一起,就成了图集。

实现



上面大致介绍了一些基本概念,然后我们从实现角度上来说下为啥这么设计。

首先,假设我们需要一个骨骼系统。很酷,是的,最近的确比较火。于是,我们就设计了一个树状的骨架,每个节点就是(Bone)。

很简单啊,再想下,骨骼上要放图片啥的,于是我们就要能访问到特定的骨骼,遍历太傻了,好吧,我们给这些骨骼加个名字,这样就能访问到具体 骨骼了,那这些名字就叫 slot。

好吧,可能有些人觉得,slot 和 bone 本质上一样,为啥需要分开呢,没必要的。我只能说事情其实并不简单,来想下,我们已经有了一个完美的骨架,图片也在应该在的骨骼上了。那我们该如何显示图片么?遍历么,从根结点开始,一直到最下层的节点,不管你用啥排序,这个顺序是固定的,但是现实总是很残酷,很多时候,我们需要不停调整图片描画的顺序,也就是调整树的节点排序,啊,好麻烦。那怎么办,我们指定下骨骼描画的顺序吧(Draw order),这些特定的骨骼也就是 slot。

你看,这下完美了,也就是 bone 用来计算位置,slot 用来控制描画。

完美的骨骼系统,一定要有碰撞区域(bounding box),这和图片差不多,一个用于显示,一个用于边界判断,好吧,那就抽象成一个概念叫(attachment),于是,slot 上就可以附加不同的 attachment 了。

终于可以换附件了,但是一个一个换好累。于是,我们把一组附件合在一起,组成了 skin。这下简单了,一换 skin,整个世界就变样了。

啊,做着做着,就发现图片太多了,要优化啊。怎么办,简单,把小图片合在一起,每个图片对应了一个大图里面的一个区域,这就是 atlas。

啊,不早了,先说到这里吧,下次有空继续。

【spine】原理介绍和程序实现,布布扣,bubuko.com

时间: 2024-10-25 06:59:55

【spine】原理介绍和程序实现的相关文章

内存分析_.Net内存原理介绍

内存原理介绍 1.       .Net应用程序中的内存 1.1.Net内存类型 Windows使用一个系统:虚拟寻址系统.这个系统的作用是将程序可用的内存地址映射到硬件内存中的实际地址上.其实际结果是在32位的Windows操作系统中,每个进程都可以使用4GB的内存,当然,64位机这个数字就更大了,在这4GB的内存中存储着可执行代码.代码加载的DLL和程序运行的所有变量,这4GB的内存成为虚拟地址空间或虚拟内存.在.Net中要使用多种类型的内存,包括:堆栈.非托管堆和托管堆. C#将数据分为2

03 Yarn 原理介绍

Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过SecondaryNameNode与NameNode进行数据同步备份,但是总会存在一定的时延,如果NameNode挂掉,但是如果有部份数据还没有同步到SecondaryNameNode上,还是可能会存在着数据丢失的问题. 包含两层: Namespace l 包含目录.文件以及块的信息 l 支持对Namespac

04 MapReduce原理介绍

大数据实战(上) # MapReduce原理介绍 大纲: * Mapreduce介绍 * MapReduce2运行原理 * shuffle及排序 定义 * Mapreduce 最早是由google公司研究提出的一种免息nag大规模数据处理的并行计算模型和方法.是hadoop面向大数据并行处理的计算模型.框架和平台 * Mapreduce是一个计算框架,既然是做计算的框架,那么表现形式就是有个输入(input),mapreduce操作这个输入(input),通过本身定义好的计算模型,得到一个输出(

[转]MySQL主从复制原理介绍

MySQL主从复制原理介绍 一.复制的原理 MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新. MySQL 使用3个线程来执行复制功能,其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句.主服务器创建一个线程将二进制日志中的内容发送到从服务器.该线程

关于BASE 24 ,BASE 64原理以及实现程序

关于BASE 24 ,BASE 64原理以及实现程序 来源 https://wangye.org/blog/archives/5/ 可能很多人听说过Base64编码,很少有人听说过Base24编码,Base24编码主要应用在序列号生成上,其实基本的算法思想都是一样的,只是编码的模式有点变化.Base64所对应的编码表是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=共计64位.而Base24所对应的编码表是BCDF

Linux Epoll介绍和程序实例

1. Epoll是何方神圣? Epoll但是当前在Linux下开发大规模并发网络程序的热门人选,Epoll 在Linux2.6内核中正式引入,和select类似,事实上都I/O多路复用技术而已,并没有什么神奇的. 事实上在Linux下设计并发网络程序,向来不缺少方法,比方典型的Apache模型(Process Per Connection,简称PPC),TPC(Thread PerConnection)模型,以及select模型和poll模型,那为何还要再引入Epoll这个东东呢?那还是有得说说

Traceroute原理介绍

一.路由追踪 路由跟踪,就是获取从主机A到达目标主机B这个过程中所有需要经过的路由设备的转发接口IP. 二.ICMP协议 Internet控制报文协议(internet control message protocol),它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制消息.控制消息是指网络通不通.主机是否可达.路由是否可用等网络本身的消息.这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用. 日常生活中,邮寄包裹会经过多个传递环节,任意一环如果无法传下

分布式文件系统FastDFS原理介绍

在生产中我们一般希望文件系统能帮我们解决以下问题,如:1.超大数据存储:2.数据高可用(冗余备份):3.读/写高性能:4.海量数据计算.最好还得支持多平台多语言,支持高并发. 由于单台服务器无法满足以上要求,这就迫使开发者不得不考虑使用其他方式解决此类问题.分布式文件系统就在这样迫切的需求下孕育而生. 今天为什么把标题定为“分布式文件系统”呢?是因为我想通过此次分享(FastDFS原理介绍),和大家去做更多关于分布式文件系统的研究和分享.我想这项研究应该会是一个“系列”性的专题.在本文之后还计划

介绍Python程序员常用的IDE和其它开发工具

概述 “工欲善其事,必先利其器”,如果说编程是程序员的手艺,那么IDE就是程序员的吃饭家伙了. IDE 的全称是Integration Development Environment(集成开发环境),一般以代码编辑器为核心,包括一系列周边组件和附属功能.一个优秀的IDE,最重要的就是在普通文本编辑之外, 提供针对特定语言的各种快捷编辑功能,让程序员尽可能快捷.舒适.清晰的浏览.输入.修改代码.对于一个现代的IDE来说,语法着色.错误提示.代码折 叠.代码完成.代码块定位.重构,与调试器.版本控制