cocos-engine icon indicating copy to clipboard operation
cocos-engine copied to clipboard

Spine, sp.Skeleton.setCompleteListener, the handler is triggered again when the animation starts in another track

Open shnyaka opened this issue 9 months ago • 3 comments

Cocos Creator version

3.5.8

System information

Google Chrome

Issue description

Unexpected behavior when running animations sequentially in different tracks

Relevant error log output

No response

Steps to reproduce

Example code:

const spine = this.getComponent(sp.Skeleton)
let closed = false

spine.setStartListener(e => {
	console.log('start', e.animation.name)
})

spine.setCompleteListener(e => {
	console.log('complete', e.animation.name)
	
	if (e.animation.name == 'open' && !closed) {
		closed = true
		spine.setAnimation(1, 'close', false)
	}
})

spine.setAnimation(0, 'open', false)

Console output:

start open
complete open
start close
complete open
complete close

complete open repeated if not use closed flag, call complete open occurs indefinitely.

Minimal reproduction project

No response

shnyaka avatar Mar 27 '25 15:03 shnyaka

@shnyaka Please review and merge this PR. Thanks!

bofeng-song avatar Mar 28 '25 05:03 bofeng-song

@shnyaka Please review and merge this PR. Thanks!

@bofeng-song 你的这个 pr 并不能彻底解决这个问题. 请参考下 我的这个 pr #19041

finscn avatar Oct 20 '25 08:10 finscn

@shnyaka setCompleteListener listens to the complete event of all animations. If you only want to listen to the complete event of a single animation, please use setTrackCompleteListener.

This issue will be closed later. If you still have any problems, please provide your feedback promptly. Thank you.

bofeng-song avatar Nov 19 '25 09:11 bofeng-song