在用Cocos2d开发游戏时,需要自定义Sprite
object-c是不推荐使用继承的,因此通常使用聚合
自定义一个类A继承自CCNode,其中包括一个CCSprite的指针
类A代表场景中的一个角色,包括玩家、怪物、场景元素等,类A中可以添加一些成员变量,用于实现游戏逻辑。
而该角色的显示,就交给CCSprite完成,简单说就是一张图片。。。
@interface Hero : CCNode {
CCSprite *mySprite;
GameLayer *theGame;
}
@property (nonatomic, retain) CCSprite *mySprite;
@property (nonatomic, assign) GameLayer *theGame;
-(id) initWithGame:(GameLayer *)game;
@end
@implementation Hero
@synthesize mySprite;
@synthesize theGame;
-(id) initWithGame:(GameLayer *)game {
self = [super init];
if (self != nil) {
self.theGame = game;
mySprite = [CCSprite spriteWithFile:@"hero.png"];
[mySprite setPosition:ccp(160, 50)];
[theGame addChild:mySprite z:2];
}
return self;
}
-(void) dealloc {
[super dealloc];
}
@end
其中theGame是该角色所在场景的layer。
对于theGame的属性,我使用的是assign,看到有的书上使用的是retain,对此我不是很赞同
依我看来,使用retain的话,那么Hero retain theGame,theGame 又 retain 了Hero中的mySprite。
这样虽然不是一定会造成内存问题,但是至少增加了内存释放的复杂性。
这与delegate通常都是assign的原因类似。