在我使用cocos2d的游戏中,会有许多不同类型的敌人,它们看起来都不同,并以不同的方式移动。此外,还会有几种不同的游戏模式,它们都使用相同的敌人。由于会有不同的游戏模式,我决定让每个敌人拥有自己的CCSprite类。在那些将有精灵移动的方式,动画等。当我的游戏中需要这些精灵中的一个时,它们将产生到场景中。唯一的问题是,我该怎么做?当他们使用自己的类时,如何调用其中一个精灵在屏幕上创建?
如果你想告诉我另一种方式,而不是让这些精灵拥有自己的课程,那很好,但请记住,我会有几种不同的游戏模式。如果我在该游戏模式的CCLayer类中为sprite执行代码,那么我将不得不两次编写代码,这需要时间。
感谢。
答案 0 :(得分:1)
您可以将CCSprite子类化并覆盖默认初始值设定项initWithTexture:rect:
取自here
的示例@implementation MySprite
-(id) initWithTexture:(CCTexture2D*)texture rect:(CGRect)rect
{
if( (self=[super initWithTexture:texture rect:rect]))
{
// initialize your ivars here
//ivar1 = xxx;
//ivar2 = yyy;
//ivar3 = zzz;
}
return self;
}
@end
// And to create an instance of MySprite you simply do:
MySprite *sprite = [MySprite spriteWithFile...];
// or any of the supported CCSprite methods.
你可以有一个看起来像这样的超级课EnemySprite
@interface EnemySprite : CCSprite
- (void)addToLayer:(CCLayer *)layer;
- (void)removeFromLayer:(CCLayer *)layer;
@end
比为每种类型的敌人创建一个子类,例如:
@inteface BigEnemySprite : EnemySprite
@end
@implementation BigEnemySprite
- (void)addToLayer:(CCLayer *)layer {
[layer addChild:self];
// animation code for your big enemy
}
- (void)removeFromLayer:(CCLayer *)layer {
[layer removeChild:self];
// animation code
}
@end
比你可以使用它们
EnemySprite *enemy = [BigEnemySprite spriteFromFile:file];
[enemy addToLayer:self];