Browse Source

[cocos2d-objc] Ensure skeleton/state are updated once before rendering the first frame.

Mario Zechner 2 years ago
parent
commit
34e50f74d5

+ 1 - 0
spine-cocos2d-objc/src/spine/SkeletonAnimation.h

@@ -54,6 +54,7 @@ typedef void(^spUpdateWorldTransformsListener)(SkeletonAnimation* node);
 	spDisposeListener _disposeListener;
 	spDisposeListener _disposeListener;
 	spCompleteListener _completeListener;
 	spCompleteListener _completeListener;
 	spEventListener _eventListener;
 	spEventListener _eventListener;
+    bool _updatedOnce;
 }
 }
 
 
 + (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
 + (id) skeletonWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;

+ 7 - 0
spine-cocos2d-objc/src/spine/SkeletonAnimation.m

@@ -104,6 +104,7 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) {
 	_state->listener = animationCallback;
 	_state->listener = animationCallback;
 
 
 	_spAnimationState* stateInternal = (_spAnimationState*)_state;
 	_spAnimationState* stateInternal = (_spAnimationState*)_state;
+    _updatedOnce = false;
 }
 }
 
 
 - (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
 - (id) initWithData:(spSkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
@@ -156,6 +157,7 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) {
 	if (_preUpdateWorldTransformsListener) _preUpdateWorldTransformsListener(self);
 	if (_preUpdateWorldTransformsListener) _preUpdateWorldTransformsListener(self);
 	spSkeleton_updateWorldTransform(_skeleton);
 	spSkeleton_updateWorldTransform(_skeleton);
 	if (_postUpdateWorldTransformsListener) _postUpdateWorldTransformsListener(self);
 	if (_postUpdateWorldTransformsListener) _postUpdateWorldTransformsListener(self);
+    _updatedOnce = true;
 }
 }
 
 
 - (void) setAnimationStateData:(spAnimationStateData*)stateData {
 - (void) setAnimationStateData:(spAnimationStateData*)stateData {
@@ -276,4 +278,9 @@ static _TrackEntryListeners* getListeners (spTrackEntry* entry) {
 	getListeners(entry)->eventListener = [listener copy];
 	getListeners(entry)->eventListener = [listener copy];
 }
 }
 
 
+-(void)draw:(CCRenderer *)renderer transform:(const GLKMatrix4 *)transform {
+    if (!_updatedOnce) [self update:0];    
+    [super draw:renderer transform:transform];
+}
+
 @end
 @end