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