在我的游戏中实现CCSprite类

时间:2012-02-19 02:40:54

标签: ios xcode cocoa-touch cocos2d-iphone

在我使用cocos2d的游戏中,会有许多不同类型的敌人,它们看起来都不同,并以不同的方式移动。此外,还会有几种不同的游戏模式,它们都使用相同的敌人。由于会有不同的游戏模式,我决定让每个敌人拥有自己的CCSprite类。在那些将有精灵移动的方式,动画等。当我的游戏中需要这些精灵中的一个时,它们将产生到场景中。唯一的问题是,我该怎么做?当他们使用自己的类时,如何调用其中一个精灵在屏幕上创建?

如果你想告诉我另一种方式,而不是让这些精灵拥有自己的课程,那很好,但请记住,我会有几种不同的游戏模式。如果我在该游戏模式的CCLayer类中为sprite执行代码,那么我将不得不两次编写代码,这需要时间。

感谢。

1 个答案:

答案 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];