Cocos2d 自定义Sprite的实现方法

在用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的原因类似。


你可能感兴趣的:(游戏,interface,layer)