From 1d8e12442ed2ce70bf4e569196b5f0bf6f427069 Mon Sep 17 00:00:00 2001 From: NathanSweet Date: Tue, 8 Oct 2013 12:06:56 +0200 Subject: [PATCH] Don't crash if animation is not found. http://www.esotericsoftware.com/forum/viewtopic.php?f=7&t=1379 --- .../src/spine/CCSkeletonAnimation.m | 14 ++++++++++++-- spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp | 14 ++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.m b/spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.m index 4f9327ab3..072b4cf97 100644 --- a/spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.m +++ b/spine-cocos2d-iphone/src/spine/CCSkeletonAnimation.m @@ -132,11 +132,21 @@ static void callback (AnimationState* state, int trackIndex, EventType type, Eve } - (TrackEntry*) setAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop { - return AnimationState_setAnimationByName(_state, trackIndex, [name UTF8String], loop); + Animation* animation = SkeletonData_findAnimation(_skeleton->data, [name UTF8String]); + if (!animation) { + CCLOG(@"Spine: Animation not found: %@", name); + return 0; + } + return AnimationState_setAnimation(_state, trackIndex, animation, loop); } - (TrackEntry*) addAnimationForTrack:(int)trackIndex name:(NSString*)name loop:(bool)loop afterDelay:(int)delay { - return AnimationState_addAnimationByName(_state, trackIndex, [name UTF8String], loop, delay); + Animation* animation = SkeletonData_findAnimation(_skeleton->data, [name UTF8String]); + if (!animation) { + CCLOG(@"Spine: Animation not found: %@", name); + return 0; + } + return AnimationState_addAnimation(_state, trackIndex, animation, loop, delay); } - (TrackEntry*) getCurrentForTrack:(int)trackIndex { diff --git a/spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp b/spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp index 71d01b5b9..aff464a79 100644 --- a/spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp +++ b/spine-cocos2dx/src/spine/CCSkeletonAnimation.cpp @@ -124,11 +124,21 @@ void CCSkeletonAnimation::setAnimationListener (CCObject* instance, SEL_Animatio } TrackEntry* CCSkeletonAnimation::setAnimation (int trackIndex, const char* name, bool loop) { - return AnimationState_setAnimationByName(state, trackIndex, name, loop); + Animation* animation = SkeletonData_findAnimation(skeleton->data, name); + if (!animation) { + CCLog("Spine: Animation not found: %s", name); + return 0; + } + return AnimationState_setAnimation(state, trackIndex, animation, loop); } TrackEntry* CCSkeletonAnimation::addAnimation (int trackIndex, const char* name, bool loop, float delay) { - return AnimationState_addAnimationByName(state, trackIndex, name, loop, delay); + Animation* animation = SkeletonData_findAnimation(skeleton->data, name); + if (!animation) { + CCLog("Spine: Animation not found: %s", name); + return 0; + } + return AnimationState_addAnimation(state, trackIndex, animation, loop, delay); } TrackEntry* CCSkeletonAnimation::getCurrent (int trackIndex) {