Реализация класса CCSprite в моей игре - PullRequest
0 голосов
/ 19 февраля 2012

В моей игре, использующей cocos2d, будет много разных типов врагов, которые выглядят по-разному и двигаются по-разному. Также будет несколько разных модов, в которых используются одни и те же враги. Поскольку будут разные режимы игры, я решил сделать так, чтобы у каждого из моих врагов был свой класс CCSprite. В них будет способ перемещения спрайтов, анимация и т. Д. Когда в моей игре понадобится один из этих спрайтов, они будут появляться на сцене. Единственное, как мне это сделать? Как мне вызвать создание одного из спрайтов на экране, когда они используют собственный класс?

Если вы хотите рассказать мне иначе, чем иметь эти спрайты, имеющие свои собственные классы, это нормально, но имейте в виду, что у меня будет пара разных игровых режимов. Если я сделаю код для спрайтов в классе CCLayer этого игрового режима, мне придется написать код дважды, что займет время.

Спасибо.

1 Ответ

1 голос
/ 19 февраля 2012

Вы можете просто создать подкласс CCSprite и переопределить инициализатор по умолчанию initWithTexture:rect:

пример взят из здесь

@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];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...