cocos / cocos-engine

Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create high-performance, engaging 2D/3D games and instant web entertainment.
https://www.cocos.com/en/creator
Other
8.25k stars 1.94k forks source link

[spine相关] 动画倒放时, "在指定区间内播放"的功能失效 #17499

Open finscn opened 2 months ago

finscn commented 2 months ago

Cocos Creator version

3.8.3

System information

all

Issue description

通过 timeScale = 负数 的方式来实现动画的倒放. 正常情况下 是ok的.

但是 当通过 trackEntry.animationStart 和 trackEntry.animationEnd 来指定播放区间时. 倒放会无视 这个播放区间, 直接倒着播放到 动画的第一帧.

Relevant error log output

No response

Steps to reproduce

如上所述

Minimal reproduction project

No response

finscn commented 2 months ago

进一步研究了下 , 问题是这样的.

当 trackEntry.timeScale = 负数 时, 动画总是从 trackEntry.animationStart 和 trackEntry.animationEnd 中, 数值较小的那个开始播放, 一直倒放到0 .

也就是说 下面两段代码:

 trackEntry.animationStart = 0.3
 trackEntry.animationEnd = 0.5 
 trackEntry.timeScale = -1 

 trackEntry.animationStart = 0.5
 trackEntry.animationEnd = 0.3
 trackEntry.timeScale = -1 

实际播放效果是一样的: 从 0.3 开始 倒放到 0.

另外 先设置 trackEntry.timeScale 后设置 animationStart/animationEnd 对结果没影响.

@minggo 这个100% 是bug . 求确认

finscn commented 2 months ago

关于倒放, spine 官方好像有个 专门的api : trackEntry .setReverse/getReverse , 但是cocos里没有暴路出来. 不知道如果暴露了 用这个api是不是可以

bofeng-song commented 2 months ago

https://github.com/EsotericSoftware/spine-runtimes/blob/3.8/spine-cpp/spine-cpp/src/spine/AnimationState.cpp 看了官方的3.8版本,没有支持 trackEntry .setReverse/getReverse ;官方在最新版本4.2是有支持,这个可能需要升级spine版本才能提供对应功能

bofeng-song commented 2 months ago

官方文档说timeScale不能小于0 https://zh.esotericsoftware.com/spine-api-reference#TrackEntry-timeScale

若需要支持倒放,目前看应该需要升级spine

finscn commented 2 months ago

官方文档说timeScale不能小于0 https://zh.esotericsoftware.com/spine-api-reference#TrackEntry-timeScale

若需要支持倒放,目前看应该需要升级spine

那cocos是否有计划升级spine 呢? spine 4.x 都出来三年多了.

竞争对手 LayaAir 目前同时 支持 3.7,3.8,4.0,4.1版本.

minggo commented 2 months ago

嗯嗯,我们研究一下。