在我的游戏中实现CCSprite类

问题描述:

在我的游戏中,使用cocos2d的时候,会出现很多不同类型的敌人,这些敌人看起来不一样,而且都以不同的方式移动。此外,还会有一些不同的游戏模式,它们都使用相同的敌人。由于会有不同的游戏模式,我决定让每个敌人都拥有自己的CCSprite类。在那些将会有精灵移动的方式,动画等等。当我的游戏需要这些精灵之一时,它们将会被引发到现场。唯一的是,我该如何做到这一点?当他们使用他们自己的班级时,我如何要求在屏幕上创建一个精灵?在我的游戏中实现CCSprite类

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

谢谢。

你可以只子类CCSprite和覆盖缺省初始化从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. 

采取initWithTexture:rect:

例如,你可以有一个超类说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]; 
+0

谢谢您的回答,但究竟是什么的 ivar1 = XXX; ivar2 = yyy;做? – akuritsu 2012-02-19 04:30:56

+0

它只是个例子,你应该初始化你的ivars – 2012-02-19 04:33:10

+0

好吧,但是有可能把我的精灵的动画放入我的精灵类中,并且每次精灵被调用并创建时,它都会动画? – akuritsu 2012-02-19 04:34:48