From b7a7870e34ac3dd013ddcd6ed8eda0b92d2f6bd5 Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Thu, 10 Nov 2022 11:49:36 +0100 Subject: [PATCH] [cocos2d-objc] Ensure skeleton/state are updated once before rendering the first frame. --- spine-cocos2d-objc/src/spine/SkeletonAnimation.h | 1 + spine-cocos2d-objc/src/spine/SkeletonAnimation.m | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/spine-cocos2d-objc/src/spine/SkeletonAnimation.h b/spine-cocos2d-objc/src/spine/SkeletonAnimation.h index c313ecf69..0f26f3e50 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonAnimation.h +++ b/spine-cocos2d-objc/src/spine/SkeletonAnimation.h @@ -54,6 +54,7 @@ typedef void(^spUpdateWorldTransformsListener)(SkeletonAnimation* node); spDisposeListener _disposeListener; spCompleteListener _completeListener; spEventListener _eventListener; + bool _updatedOnce; } + (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData; diff --git a/spine-cocos2d-objc/src/spine/SkeletonAnimation.m b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m index 1b000ca59..4fc632abb 100644 --- a/spine-cocos2d-objc/src/spine/SkeletonAnimation.m +++ b/spine-cocos2d-objc/src/spine/SkeletonAnimation.m @@ -104,6 +104,7 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) { _state->listener = animationCallback; _spAnimationState* stateInternal = (_spAnimationState*)_state; + _updatedOnce = false; } - (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData { @@ -157,6 +158,7 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) { if (_preUpdateWorldTransformsListener) _preUpdateWorldTransformsListener(self); spSkeleton_updateWorldTransform(_skeleton); if (_postUpdateWorldTransformsListener) _postUpdateWorldTransformsListener(self); + _updatedOnce = true; } - (void) setAnimationStateData:(spAnimationStateData*)stateData { @@ -277,4 +279,9 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) { getListeners(entry)->eventListener = [listener copy]; } +-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform { + if (!_updatedOnce) [self update:0]; + [super draw:renderer transform:transform]; +} + @end