2012-02-19 63 views
0

在我的遊戲中,使用cocos2d的時候,會出現很多不同類型的敵人,這些敵人看起來不一樣,而且都以不同的方式移動。此外,還會有一些不同的遊戲模式,它們都使用相同的敵人。由於會有不同的遊戲模式,我決定讓每個敵人都擁有自己的CCSprite類。在那些將會有精靈移動的方式,動畫等等。當我的遊戲需要這些精靈之一時,它們將會被引發到現場。唯一的是,我該如何做到這一點?當他們使用他們自己的班級時,我如何要求在屏幕上創建一個精靈?在我的遊戲中實現CCSprite類

如果你想告訴我另一種方式,而不是讓這些精靈擁有自己的類,那很好,但請記住,我將擁有幾種不同的遊戲模式。如果我在該遊戲模式的CCLayer類中爲精靈編寫代碼,那麼我將不得不編寫兩次代碼,這需要時間。

謝謝。

回答

1

你可以只子類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