Skip to content

[Spine相关] jsb-spine-skeleton.js 中 对 trackTime 的使用 存在错误. #18523

@finscn

Description

@finscn

Cocos Creator version

3.8.5

System information

all

Issue description

错误的代码如下

    animation.setCompleteListener = function (listener) {
        this._compeleteListener = listener;
        this.setCompleteListenerNative(function (trackEntry) {
            const loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd);
            this._compeleteListener && this._compeleteListener(trackEntry, loopCount);
        });
    };

    // The methods are added to be compatibility with old versions.
    animation.setTrackCompleteListener = function (trackEntry, listener) {
        this._trackCompeleteListener = listener;
        this.setTrackCompleteListenerNative(trackEntry, function (trackEntryNative) {
            const loopCount = Math.floor(trackEntryNative.trackTime / trackEntryNative.animationEnd);
            this._trackCompeleteListener && this._trackCompeleteListener(trackEntryNative, loopCount);
        });
    };

通过 trackTime 来计算 loopCount 的算法不对.

spine 官方api 的说明如下:

Image Image

根据官方说明, trackTime = 0 , 时 animationTime = animationStart .
也就是说. trackTime 是作用于 animationStart 和 animationEnd 这个区间的.

比如, 一个动画的完整时长是 10秒.
那么 默认 的

trackEntry.animationStart = 0
trackEntry.animationEnd = 10

(以上代码并非我杜撰 从spine官方rumtime里可以看到类似逻辑 )

但是 spine是支持 自定义 动画播放区间的.
此时如果我使用了

trackEntry.animationStart = 3
trackEntry.animationEnd = 6
trackEntry.loop = true

让动画 在 3到6秒之间循环播放.

那么上面 计算loopCount 的逻辑就有问题了.

所以正确的方式应该是

const duration = trackEntryNative.animationEnd - trackEntryNative.animationStart;
const loopCount = Math.floor(trackEntryNative.trackTime / duration);

Relevant error log output

No response

Steps to reproduce

.

Minimal reproduction project

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugNeeds TriageNeeds to be assigned by the team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions