基于iOS系统的动画播放方法、电子设备和介质与流程

文档序号:23264674发布日期:2020-12-11 18:54阅读:373来源:国知局
基于iOS系统的动画播放方法、电子设备和介质与流程

本公开涉及电子技术领域,尤其涉及一种基于ios系统的spine动画播放方法、电子设备和介质。



背景技术:

spine动画是一种2d骨骼动画,现有的ios终端播放spines动画通常通常应用在游戏场景,且需要通过非ios系统内置的外部游戏引擎作为渲染器(例如cocos引擎),来实现spines动画播放,并没有其他原生场景播放spines动画。现有的基于ios终端播放spines动画的技术方案至少具有以下缺点:

(1)spine动画的生命周期、变量状态等动画参数不受ios系统管控,而是由外部游戏引擎管控,动画状态难以把控,且ios原生系统无法控制动画生命周期。此外spine动画的变量的生命周期、内存的占用等不能利用ios平台提供的功能进行优化,从而导致占用的内存过大,设备耗电量过大。

(2)ios系统与外部游戏引擎需要相互兼容性,一旦ios系统和动画引擎存在兼容性的问题,则无法保证程序稳定性,需要投入较大精力解决兼容性问题。

(3)一个应用程序中,有且仅能有一个外部游戏引擎,无法接入其他的相关引擎,外部游戏引擎具有独占性,所以播放spine动画时,无法同时启动多个外部游戏引擎进行播放,播放动画的容器是以单例形式存在,无法更多的单例。所以需要播放多个spine动画时,只能将多个spine动画场景进行整合,按照动画的顺序进行播放,无法同时在屏幕中播放多个spine动画。



技术实现要素:

本公开实施例提供一种基于ios系统的spine动画播放方法、电子设备和介质,用以解决上述背景技术中提出的技术问题,或至少部分解决上述背景技术中提出的技术问题。

第一方面,本公开实施例提供一种基于ios系统的spine动画播放方法,包括:

获取一个或多个待播放的spine动画的动画列表信息;

基于每一所述spine动画的动画列表信息构建骨骼节点集合和插槽节点集合,所述骨骼节点集合中包括一个或多个骨骼节点数据,所述骨骼节点数据包括动画效果信息和运动逻辑信息,所述插槽节点集合中包括一个或多个插槽节点数据,所述插槽节点数据包括纹理展示信息;

将每一所述spine动画对应的骨骼节点数据和插槽节点数据分别添加至ios系统原生的游戏引擎的场景架构的根节点上生成对应的动作场景;

获取每一所述动画场景对应的纹理信息,基于每一所述动画场景和对应的纹理信息生成每一待播放的spine动画视图进行播放。

第二方面,本公开实施例提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本公开第一方面实施例所述基于ios系统的spine动画播放方法。

第三方面,本公开实施例提供一种计算机可读存储介质,所述计算机指令用于执行本公开第一方面实施例所述基于ios系统的spine动画播放方法。

本公开基于ios系统提供的原生的游戏引擎播放spine动画,使得动画状态、变量生命周期的管理、渲染节点全部交给ios系统来完成,不再需要通过cocos等外部游戏引擎完成,使得动画的生命周期、动画状态由ios系统来持有,进行全面控制,做到可控状态。此外,采用ios系统平台提供的原生的游戏引擎的渲染技术,完全不再需要去考虑兼容的问题,在ios系统中可以完全自由的使用,最后,本公开采用原生游戏引擎渲染动画,原生游戏引擎不再以单例形式存在,可以创建多个用于渲染动画的视图,同时视图内可以加载多个节点,能够实现同屏幕到同时播放多个动画场景的效果。

附图说明

通过结合附图对本申请实施例进行更详细的描述,本公开的上述以及其他目的、特征和优势将变得更加明显。附图用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与本申请实施例一起用于解释本申请,并不构成对本申请的限制。

图1为本公开一实施例所描述的基于ios系统的spine动画播放方法流程图;

图2为本公开一实施例所描述的插槽节点数据进行空间坐标转换的过程及效果示意图;

图3为本公开一实施例所描述的电子设备示意图性框图。

具体实施方式

为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。

本公开实施例提供了一种基于ios系统的spine动画播放方法,如图1所示,包括以下步骤:

步骤s1、获取一个或多个待播放的spine动画的动画列表信息;

步骤s2、基于每一所述spine动画的动画列表信息构建骨骼节点集合和插槽节点集合,所述骨骼节点集合中包括一个或多个骨骼节点数据,所述骨骼节点数据包括动画效果信息和运动逻辑信息,所述插槽节点集合中包括一个或多个插槽节点数据,所述插槽节点数据包括纹理展示信息;

需要说明的是,现有的spine动画播放技术是将骨骼节点和插槽节点结合在一起作为一个整体使用,插槽节点依附于骨骼节点,这样使得只能整体控制动画场景,即只有动作信息改变时也需要改变图片信息,只有图片信息改变时动作信息也需要同时改变。而本公开是将骨骼节点和插槽节点分开控制,这样使得东阿虎场景展示的图片信息和动作信息是分开控制的,两者之间互不干扰,例如要替换动画里的一个图片,则不需要修改动作信息,只需要修改对应的图片即可。

步骤s3、将每一所述spine动画对应的骨骼节点数据和插槽节点数据分别添加至ios系统原生的游戏引擎的场景架构的根节点上生成对应的动作场景;

步骤s4、获取每一所述动画场景对应的纹理信息,基于每一所述动画场景和对应的纹理信息生成每一待播放的spine动画视图进行播放。

本公开基于ios系统提供的原生的游戏引擎播放spine动画,使得动画状态、变量生命周期的管理、渲染节点全部交给ios系统来完成,不再需要通过cocos等外部游戏引擎完成,使得动画的生命周期、动画状态由ios系统来持有,进行全面控制,做到可控状态。此外,采用ios系统平台提供的原生的游戏引擎的渲染技术,完全不再需要去考虑兼容的问题,在ios系统中可以完全自由的使用,最后,本公开采用原生游戏引擎渲染动画,原生游戏引擎不再以单例形式存在,可以创建多个用于渲染动画的视图,同时视图内可以加载多个节点,能够实现同屏幕到同时播放多个动画场景的效果。

作为一种示例,所述ios系统原生的游戏引擎为spritekit,spritekit的最佳动画展示方式是通过预设行(skaction)到节点上,通过多组行为进行组合、序列化等操作来完成动画效果。所述步骤s1可包括:

步骤s11、所述从待播放的spine动画的json文件中解析获取动画数据,获取多个动作数据和时间线信息,所述时间线信息包括时间信息和顺序信息,将所述动画数据输入预先建立的动画列表生成模型转换为供ios系统原生的游戏引擎使用的所述动画列表信息。

需要说明的是,现有的spine动画播放技术通过动画状态机进行实时事件回调,然后根据事件类型直接实时渲染动画效果;或者通过提供动画的具体时间线数据,自己对时间线管理器中的动画参数进行拼接来实现效果。但是这两种方案对于spritekit来说都不合适,因为spritekit的最佳动画展示方式是通过预设行为到节点上,通过多组行为进行组合、序列化等操作来完成动画效果。因此,本公开所述方法还包括步骤s10、构建所述动画列表生成模型:

步骤s101、将每一动作数据转换为对应的指令,封装为对应的动作对象,所述动作对象包括骨骼动画数据和插槽动画数据,所述骨骼动画数据包括形变数据、旋转数据、缩放数据和斜切数据,所述插槽动画数据包括附件纹理的替换数据、显示隐藏数据、颜色的变化数据;

步骤s102、基于所述动作对象和所述时间线信息建立每套动作下每个节点上对应的预设行为序列;

步骤s103、基于所述每个节点上对应的预设行为序列和所述时间线信息,将每套动作对应的所有节点的行为序列组合在一起,生成每套动作对应的动画对象,基于所述时间线信息以及所有生成的动画对象,生成所述动画列表信息,其中,基于所述骨骼动画数据生成的动画列表信息为骨骼动画列表信息,基于所述插槽动画数据生成的动画列表信息为插槽动画列表信息。

通过步骤s101-步骤s103构建了具有三层结构的动画列表生成模型,

第一层为动画对象层:每个动画对象即为一套动作,例如跑步、跳跃、拥抱等动作,这一层包含了所有节点的运动行为和各类纹理的显示转换,每套动作都可以拆分为每个节点在特定时间上的一系列行为,并且这些行为都有顺序。但是对于每个节点来说,互相之间并没有顺序关系,因此动画对象层相当于是对多个节点上对应的预设行为序列进行了成组操作,而最后这个集合会合并为一个动画。

第二层为节点预设行为序列层:每个节点预设行为序列即为一套动作下,该节点的一连串行为,每个节点预设行为序列是由多套包含了时间和顺序关系的动作对象组合而成,因此节点预设行为序列相当于是动作对象的有序集合。当然在这里并列执行动画也是顺序关系的一种,例如挥手这个动作,手掌部分可能既需要进行位移,又需要进行旋转,这两种动作可能是同时执行的。

第三层为动作对象层:每个动作对象是对一个具体的动作指令的抽象,在spine动画中,动画部分主要包含骨骼节点动画和插槽节点动画,

因此本公开对动作对象建立了骨骼动画数据和插槽动画数据两个子类,对模型细化。其中骨骼动画数据主要包含了形变、旋转、缩放、斜切等操作,插槽动画主要包含了附件纹理的替换数据、显示隐藏数据、颜色的变化数据等效果。

通过动画列表生成模型将spine中的json的动画数据转换为ios系统原生的游戏引擎为spritekit对应的行为对象,后续再附加至对应的节点上生成对应的节点集合。

作为一种示例,所述步骤s2包括:

步骤s21、在ios系统原生的游戏引擎的基本节点(例如spritekit中的sknode)上配置每一所述spine动画的骨骼动画列表信息,构建所述对应的骨骼节点集合;

其中,骨骼节点用于提供动作信息,不需要显示纹理,因此直接继承自ios系统原生的游戏引擎的基本节即可。

步骤s22、在ios系统原生的游戏引擎的精灵节点(例如spritekit中的skspritenode)上配置每一所述spine动画的插槽动画列表信息,构建所述对应的插槽节点集合。

其中,可以通过在精灵节点上添加纹理直接显示对应的效果。

由于spine动画的json文件中提供的数据的空间坐标系和ios系统原生的游戏引擎场景展示的坐标系是不同的,所以需要进行空间坐标换算,由于ios系统原生的游戏引擎场景的视图是可以缩放的,因此需要进行比例换算,动画展示的方向可能与原始图像不同,因此还可能需要进行方位计算。因此,所述步骤s3具体还包括步骤s31、将每一所述spine动画对应的骨骼节点数据和插槽节点数据进行空间坐标转换、比例缩放和方位变换后转换为ios系统原生的游戏引擎的场景架构的坐标系数据,然后再添加至ios系统原生的游戏引擎的场景架构的根节点上,组合生成树形的节点结构,生成对应的动作场景。

原始的插槽坐标系和原生的游戏引擎的场景架构的纹理坐标系存在不同,插槽坐标系原点为左上角(0,0),纹理坐标系原点为左下角(0,0),为了保证动画能够正常的执行,在渲染动画时,需要讲二者之间的坐标系进行转换,已知插槽的尺寸在两种坐标系中是固定不变的,而且插槽在插槽坐标系中的坐标是已知变量,因此只需要计算出插槽在纹理坐标系的坐标即可。在转换的过程中,插槽是否发生旋转也会是重要的影响因子。具体地,所述步骤s31中,所述插槽节点数据进行空间坐标转换,转换过程及效果如图2所示,包括以下步骤:

步骤s311、将插槽节点数据从原始的插槽坐标系转换为ios系统原生的游戏引擎的场景架构的纹理坐标系数据:

步骤s312、插槽节点数据在插槽坐标系中的坐标为(x0,y0),尺寸为(w0,h0),画布尺寸为(pw,ph)均为已知变量,插槽的坐标系逆时针旋转90度后与所述纹理坐标系方向一致,插槽的尺寸在插槽坐标系和纹理坐标系中固定不变,插槽原始数据在纹理坐标系中对应的坐标为(x1,y1),

插槽的实际尺寸宽w=w0/pw,高h=h0/ph;

若插槽旋转w角度,则x1=y0/ph–w,y1=x0/pw-h0;

若插槽未发生旋转,则x1=y0/pw,y1=y0/ph-h0。

作为一种示例,步骤s4中,获取每一所述动画场景对应的纹理信息,包括:

步骤s41、基于所述ios系统原生的游戏引擎的底层图形引擎对当前的纹理进行局部渲染得到每一所述动画场景对应的纹理信息。

需要说明的是,现有的spine动画播放技术中,纹理集合文件内描述了对于一张完整纹理图片如何进行裁切的具体信息,包含了x向坐标值、y向坐标值、宽(width)、高(height)、旋转方向(rotated)等数据。而本公开的spritekit对于局部纹理的处理方式并非重新生成图像,而是通过底层图形引擎,进行局部渲染展示的。因此局部纹理与完整纹理在数据源上使用的是相同的对象。这种纹理复用设计大大降低了内存占用,所有的子纹理都是通过图形处理器(gpu)实时渲染出来而不需要有具体的二进制对象,也正是因为如此,本公开的spine动画播放方案能够降低内存和cpu占用。

需要说明的是,本公开实施例所述的装置是与本公开实施例所述的方法相对应的,因此所述方法实施例中所描述的技术细节也都同样适用于所述装置,在此不再一一赘述。

本公开实施例还提供一种电子设备,包括:至少一个处理器;以及,与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被设置为用于执行本公开实施例所述基于ios系统的spine动画播放方法。

本公开实施例还提供一种计算机可读存储介质,所述计算机指令用于执行本公开实施例所述基于ios系统的spine动画播放方法。

图3示出了适于用来实现本公开实施例的电子设备100的结构示意图。本公开实施例中的终端设备可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图3示出的电子设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。

如图3所示示例,电子设备100可以包括处理装置(例如中央处理器、图形处理器等)101,其可以根据存储在只读存储器(rom)102中的程序或者从存储装置108加载到随机访问存储器(ram)103中的程序而执行各种适当的动作和处理。在ram103中,还存储有电子设备100操作所需的各种程序和数据。处理装置101、rom102以及ram103通过总线104彼此相连。输入/输出(i/o)接口105也连接至总线104。

通常,以下装置可以连接至i/o接口105:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置106;包括例如液晶显示器(lcd)、扬声器、振动器等的输出装置107;包括例如磁带、硬盘等的存储装置108;以及通信装置109。通信装置109可以允许电子设备100与其他设备进行无线或有线通信以交换数据。虽然图3示出了具有各种装置的电子设备100,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。

特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置109从网络上被下载和安装,或者从存储装置108被安装,或者从rom102被安装。在该计算机程序被处理装置101执行时,执行本公开实施例的方法中限定的上述功能。

需要说明的是,本公开的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。

上述计算机可读介质可以是上述电子设备中所包含的;也可以是单独存在,而未装配入该电子设备中。

可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,程序设计语言包括面向对象的程序设计语言—诸如java、smalltalk、c++,还包括常规的过程式程序设计语言—诸如“c”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(lan)或广域网(wan)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。

附图中的流程图和框图,图示了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

描述于本公开实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,单元的基于ios系统的spine动画播放方法、电子设备和介质在某种情况下并不构成对该单元本身的限定。

以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1