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

This commit is contained in:
Mario Zechner 2022-11-10 11:49:36 +01:00
parent f3247caee3
commit 34e50f74d5
2 changed files with 8 additions and 0 deletions

View File

@ -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;

View File

@ -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