Cocos Creator Spine动画时间轴(事件时间轴,骨骼时间轴)

Posted gamedaybyday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cocos Creator Spine动画时间轴(事件时间轴,骨骼时间轴)相关的知识,希望对你有一定的参考价值。

cocos版本:2.3.4

spine版本:3.8

 

帧同步和Spine动画同步的问题

这个主要是做帧同步时,spine动画上有自定义事件抛出,且动画骨骼上绑定了伤害判定的盒子。

因为动画不是逻辑帧来驱动的,所以不同客户端播放动画速度不一样,那么在相同逻辑帧时, 可能A已经播放完成,而B还在播放动画中,那么判断就会不一致。

 

例如一个人物挥拳,伤害判定盒子在拳头上,A在逻辑帧10的时候,动画播放到第20帧,拳头伸出,抛出damageEvent事件,计算伤害。

而B在逻辑帧10,动画可能播放到18帧,拳头没有完全伸出,也没有抛出帧事件damageEvent。

 

而spine动画没法用逻辑帧去驱动,那么动画会卡顿。动画本身是渲染层的东西,不应该涉及到逻辑层。

 

这里尝试根据时间轴来判定逻辑,将事件和伤害判定范围划分到驱动帧上。

例如事件帧damageEvent在挥拳动画0.13秒抛出。

那么根据逻辑帧50ms一帧, damageEvent就应该是在第3个逻辑帧执行,无论动画播放到哪。在第三帧去获取拳头碰撞盒子的位置,进行逻辑判断。

这样所有客户端,都会在相同的逻辑帧,执行相同的伤害判断逻辑,有相同的碰撞范围,产生相同的结果。

 

 

 

Spine动画事件时间轴的获取

例如下图中攻击动画attack1_1上有伤害判定的damge事件,我们在cocos中去获取,并将其划分到驱动帧上。

技术图片

 

 

打印出节点上骨骼动画sp.Skeleton

spine的事件帧位置在 _state.data.skeletonData.animations[i].timelines.EventTimeline上。如下图:   (输出信息太长了,截成两张图了)

第一张图:

技术图片

 

第二张图,接上一张图的timelines的第65-67项:

技术图片

 

 

由上图可以看到攻击动画attack1_1上,在攻击动作进行到0.2333秒时,抛出了damge伤害计算事件,那就是在第1个逻辑帧播放攻击动画,然后在第5个逻辑帧进行伤害判定。

 

伤害盒子范围

我们知道了damage事件在0.2333秒抛出,那么damage的伤害判定盒子的位置和范围如何获取???

我找了半天没找着,莫非位置是实时计算的。。。

如果是实时的,那么只有在游戏中播放一遍,在播放中获取位置。。。

 

以上是关于Cocos Creator Spine动画时间轴(事件时间轴,骨骼时间轴)的主要内容,如果未能解决你的问题,请参考以下文章

cocos creator spine骨骼动画组件使用

Cocos Creator Spine设置Animation Cache Mode为SHARED_CACHE 导致无法抛出帧自定义事件

Cocos Creator Spine设置Animation Cache Mode为SHARED_CACHE 导致无法抛出帧自定义事件

CocosCreator入门 ------ 资源(骨骼动画)

如何提高cocos2d-x-spine骨骼动画加载速度

如何提高cocos2d-x-spine骨骼动画加载速度