mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-02-06 15:24:55 +08:00
Refactoring to make it easier to load a SkeletonData in a subclass constructor.
This commit is contained in:
parent
eb190c4b3e
commit
0d488eafe6
@ -44,11 +44,11 @@ Draws a skeleton.
|
||||
Atlas* _atlas;
|
||||
}
|
||||
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData;
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
|
||||
|
||||
- (id) initWithData:(SkeletonData*)skeletonData;
|
||||
- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
|
||||
- (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
|
||||
- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
|
||||
|
||||
|
||||
@ -27,7 +27,7 @@
|
||||
#import <spine/spine-cocos2d-iphone.h>
|
||||
|
||||
@interface CCSkeleton (Private)
|
||||
- (void) initialize:(SkeletonData*)skeletonData;
|
||||
- (void) initialize:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
|
||||
@end
|
||||
|
||||
@implementation CCSkeleton
|
||||
@ -37,8 +37,8 @@
|
||||
@synthesize debugSlots = _debugSlots;
|
||||
@synthesize debugBones = _debugBones;
|
||||
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData {
|
||||
return [[[CCSkeleton alloc] initWithData:skeletonData] autorelease];
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
|
||||
return [[[CCSkeleton alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease];
|
||||
}
|
||||
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
|
||||
@ -49,7 +49,9 @@
|
||||
return [[[CCSkeleton alloc] initWithFile:skeletonDataFile atlasFile:atlasFile scale:scale] autorelease];
|
||||
}
|
||||
|
||||
- (void) initialize:(SkeletonData*)skeletonData {
|
||||
- (void) initialize:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
|
||||
_ownsSkeletonData = ownsSkeletonData;
|
||||
|
||||
_skeleton = Skeleton_create(skeletonData);
|
||||
|
||||
_blendFunc.src = GL_ONE;
|
||||
@ -61,13 +63,13 @@
|
||||
[self scheduleUpdate];
|
||||
}
|
||||
|
||||
- (id) initWithData:(SkeletonData*)skeletonData {
|
||||
- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
|
||||
NSAssert(skeletonData, @"skeletonData cannot be null.");
|
||||
|
||||
self = [super init];
|
||||
if (!self) return nil;
|
||||
|
||||
[self initialize:skeletonData];
|
||||
[self initialize:skeletonData ownsSkeletonData:ownsSkeletonData];
|
||||
|
||||
return self;
|
||||
}
|
||||
@ -83,8 +85,7 @@
|
||||
SkeletonJson_dispose(json);
|
||||
if (!skeletonData) return 0;
|
||||
|
||||
[self initialize:skeletonData];
|
||||
_ownsSkeletonData = YES;
|
||||
[self initialize:skeletonData ownsSkeletonData:YES];
|
||||
|
||||
return self;
|
||||
}
|
||||
@ -104,8 +105,7 @@
|
||||
SkeletonJson_dispose(json);
|
||||
if (!skeletonData) return 0;
|
||||
|
||||
[self initialize:skeletonData];
|
||||
_ownsSkeletonData = YES;
|
||||
[self initialize:skeletonData ownsSkeletonData:YES];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
@ -40,11 +40,11 @@ Draws an animated skeleton, providing a simple API for applying one or more anim
|
||||
NSMutableArray* _stateDatas;
|
||||
}
|
||||
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData;
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
|
||||
|
||||
- (id) initWithData:(SkeletonData*)skeletonData;
|
||||
- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData;
|
||||
- (id) initWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale;
|
||||
- (id) initWithFile:(NSString*)skeletonDataFile atlasFile:(NSString*)atlasFile scale:(float)scale;
|
||||
|
||||
|
||||
@ -34,8 +34,8 @@
|
||||
|
||||
@synthesize states = _states;
|
||||
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData {
|
||||
return [[[CCSkeletonAnimation alloc] initWithData:skeletonData] autorelease];
|
||||
+ (id) skeletonWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
|
||||
return [[[CCSkeletonAnimation alloc] initWithData:skeletonData ownsSkeletonData:ownsSkeletonData] autorelease];
|
||||
}
|
||||
|
||||
+ (id) skeletonWithFile:(NSString*)skeletonDataFile atlas:(Atlas*)atlas scale:(float)scale {
|
||||
@ -52,8 +52,8 @@
|
||||
[self addAnimationState];
|
||||
}
|
||||
|
||||
- (id) initWithData:(SkeletonData*)skeletonData {
|
||||
self = [super initWithData:skeletonData];
|
||||
- (id) initWithData:(SkeletonData*)skeletonData ownsSkeletonData:(bool)ownsSkeletonData {
|
||||
self = [super initWithData:skeletonData ownsSkeletonData:ownsSkeletonData];
|
||||
if (!self) return nil;
|
||||
|
||||
[self initialize];
|
||||
|
||||
@ -32,8 +32,8 @@ using std::max;
|
||||
|
||||
namespace spine {
|
||||
|
||||
static CCSkeleton* createWithData (SkeletonData* skeletonData) {
|
||||
CCSkeleton* node = new CCSkeleton(skeletonData);
|
||||
static CCSkeleton* createWithData (SkeletonData* skeletonData, bool ownsSkeletonData) {
|
||||
CCSkeleton* node = new CCSkeleton(skeletonData, ownsSkeletonData);
|
||||
node->autorelease();
|
||||
return node;
|
||||
}
|
||||
@ -50,14 +50,11 @@ static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atl
|
||||
return node;
|
||||
}
|
||||
|
||||
void CCSkeleton::initialize (SkeletonData *skeletonData) {
|
||||
ownsSkeletonData = false;
|
||||
void CCSkeleton::initialize () {
|
||||
atlas = 0;
|
||||
debugSlots = false;
|
||||
debugBones = false;
|
||||
|
||||
skeleton = Skeleton_create(skeletonData);
|
||||
|
||||
blendFunc.src = GL_ONE;
|
||||
blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
|
||||
|
||||
@ -65,22 +62,36 @@ void CCSkeleton::initialize (SkeletonData *skeletonData) {
|
||||
scheduleUpdate();
|
||||
}
|
||||
|
||||
CCSkeleton::CCSkeleton (SkeletonData *skeletonData) {
|
||||
initialize(skeletonData);
|
||||
void CCSkeleton::setSkeletonData (SkeletonData *skeletonData, bool ownsSkeletonData) {
|
||||
skeleton = Skeleton_create(skeletonData);
|
||||
this->ownsSkeletonData = ownsSkeletonData;
|
||||
}
|
||||
|
||||
CCSkeleton::CCSkeleton () {
|
||||
initialize();
|
||||
}
|
||||
|
||||
CCSkeleton::CCSkeleton (SkeletonData *skeletonData, bool ownsSkeletonData) {
|
||||
initialize();
|
||||
|
||||
setSkeletonData(skeletonData, ownsSkeletonData);
|
||||
}
|
||||
|
||||
CCSkeleton::CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale) {
|
||||
initialize();
|
||||
|
||||
SkeletonJson* json = SkeletonJson_create(atlas);
|
||||
json->scale = scale;
|
||||
SkeletonData* skeletonData = SkeletonJson_readSkeletonDataFile(json, skeletonDataFile);
|
||||
CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data.");
|
||||
SkeletonJson_dispose(json);
|
||||
|
||||
initialize(skeletonData);
|
||||
ownsSkeletonData = true;
|
||||
setSkeletonData(skeletonData, true);
|
||||
}
|
||||
|
||||
CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale) {
|
||||
initialize();
|
||||
|
||||
atlas = Atlas_readAtlasFile(atlasFile);
|
||||
CCAssert(atlas, "Error reading atlas file.");
|
||||
|
||||
@ -90,8 +101,7 @@ CCSkeleton::CCSkeleton (const char* skeletonDataFile, const char* atlasFile, flo
|
||||
CCAssert(skeletonData, json->error ? json->error : "Error reading skeleton data file.");
|
||||
SkeletonJson_dispose(json);
|
||||
|
||||
initialize(skeletonData);
|
||||
ownsSkeletonData = true;
|
||||
setSkeletonData(skeletonData, true);
|
||||
}
|
||||
|
||||
CCSkeleton::~CCSkeleton () {
|
||||
|
||||
@ -41,11 +41,11 @@ public:
|
||||
bool debugSlots;
|
||||
bool debugBones;
|
||||
|
||||
static CCSkeleton* createWithData (SkeletonData* skeletonData);
|
||||
static CCSkeleton* createWithData (SkeletonData* skeletonData, bool ownsSkeletonData = false);
|
||||
static CCSkeleton* createWithFile (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
|
||||
static CCSkeleton* createWithFile (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
|
||||
|
||||
CCSkeleton (SkeletonData* skeletonData);
|
||||
CCSkeleton (SkeletonData* skeletonData, bool ownsSkeletonData = false);
|
||||
CCSkeleton (const char* skeletonDataFile, Atlas* atlas, float scale = 1);
|
||||
CCSkeleton (const char* skeletonDataFile, const char* atlasFile, float scale = 1);
|
||||
|
||||
@ -58,10 +58,14 @@ public:
|
||||
// CCBlendProtocol
|
||||
CC_PROPERTY(cocos2d::ccBlendFunc, blendFunc, BlendFunc);
|
||||
|
||||
protected:
|
||||
CCSkeleton ();
|
||||
void CCSkeleton::setSkeletonData (SkeletonData *skeletonData, bool ownsSkeletonData);
|
||||
|
||||
private:
|
||||
bool ownsSkeletonData;
|
||||
Atlas* atlas;
|
||||
void initialize (SkeletonData *skeletonData);
|
||||
void initialize ();
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -58,6 +58,9 @@ public:
|
||||
void addAnimation (char* name, bool loop, float delay = 0, int stateIndex = 0);
|
||||
void clearAnimation (int stateIndex = 0);
|
||||
|
||||
protected:
|
||||
CCSkeletonAnimation ();
|
||||
|
||||
private:
|
||||
typedef CCSkeleton super;
|
||||
std::vector<AnimationStateData*> stateDatas;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user