akuritsu
akuritsu

Reputation: 440

Implementing CCSprite class into my game

In my game, which is using cocos2d, there is going to be many different types of enemies, which all look different, and move all in different ways. Also, there is going to be a couple of different gamemodes, which both use the same enemies. As there will be different gamemodes, I decided to make each of my enemies have their own CCSprite class. In those there will be the way that the sprites move, the animation, etc. When one of these sprite is needed in my game, they will be spawned in to the scene. The only thing is, how do I do this? How do I call for one of the sprites to be create on the screen when they are using a class of their own?

If you want to tell me another way than having these sprites having their own classes, that is fine, but keep in mind that I will be having a couple of different gamemodes. If I do the code for the sprites in the CCLayer class of that gamemode, well I will have to write the code twice, which will take time.

Thanks.

Upvotes: 0

Views: 646

Answers (1)

Bryan Chen
Bryan Chen

Reputation: 46608

You can just subclass CCSprite and override the default initializer initWithTexture:rect:

example taken from 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.

you can have a super class say EnemySprite that looks like this

@interface EnemySprite : CCSprite
- (void)addToLayer:(CCLayer *)layer;
- (void)removeFromLayer:(CCLayer *)layer;
@end

than create a subclass for each type of enemy for example:

@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

than you can use them like

EnemySprite *enemy = [BigEnemySprite spriteFromFile:file];
[enemy addToLayer:self];

Upvotes: 1

Related Questions