sp.Skeleton在CacheMode为非REALTIME无法捕获动画中的事件

因为我们的游戏中,许多逻辑是用事件去驱动的。比如攻击是有一个完整的出招和收招流程,而造成伤害的判定点就是根据这个动画中的事件来驱动的。

但是因为我们有大量相同的小怪,非常适合用spine的cache模式来进行性能优化。

但我看了一下2.4.11的源码,cache模式下很多功能都不能用,其他的获取当前动画以及动作混合这些都可以规避掉。但唯独事件这块没法绕开(解决方案起始我脑子里也有,让动画把动作拆成出招和收招,然后就能根据动画结束来进行操作了,但这么搞会被策划打死的)。

想问一下有没有办法可以让cache模式可以收到事件

看了一下源码,如果不改底层代码,只是通过一些技巧来实现是不可能的,cache模式没有AnimationState,而所有事件是在update的时候,让所有对应的AnimationState加入消息队列的。

不知道有没有老哥有好的解决方案了,莫非只能靠拆动画的方式来搞了吗。。。

看了3.7的源码,在spine这块的update逻辑是一样的,也就是说最新版本也并不支持,看来是设计如此。

不过讲道理,我粗略看了一下cache的实现(没有细致到每一段代码),如果我没有理解错用cache的原理似乎就是把spine的动态动画变成帧动画,这样所有的spine就不再每次都计算transform等一系列顶点信息了。

因此,混合+多track不支持没啥问题,但我不是太理解为什么缓存模式为啥不能抛事件,在距离最近的一帧抛出这个事件不就可以了。

手动读取spine动画数据定时检测触发吧

cache模式就是用空间换时间 避免重复的计算。事件这个问题 我后续会添加 感谢反馈。