2010-12-28 1 views
0

Я ищу, чтобы сделать много дубликатов или клонов моего CCSprite, который был подклассом. Это вражеский персонаж в моей игре, и мне нужно будет дублировать его бесчисленное количество раз. Как я могу это сделать?Создание дубликата CCSprite

Мне сказали, что я должен сделать класс EnemyFactory, который превращает врагов в группы и хранит их для последующих уровней в игре.

Если кто-то может объяснить, пожалуйста, это для меня, это было бы весьма признателен :)

+0

Нам нужно больше деталей. Зачем вам нужно делать это иначе, чем alloc + init и, возможно, вызов метода установки? – slycrel

+0

Я не совсем уверен, как это сделать, возможно, это то, что мне нужно. Я знаю, что alloc + init - enemyArray = [[NSMutableArray alloc] init]; Полностью случайная демонстрация, но это то, что правильно? Как это поможет мне дублировать спрайт? Кроме того, что вы подразумеваете под настройкой вызова метода? Можете ли вы привести пример? Спасибо – Joethemonkey101

ответ

3

Уверен, похоже, что вы хотите создать механизм для отслеживания всех врагов, которые вы создаете, и наблюдать/корректировать их местоположения?

Я предлагаю добавить вновь созданные враг в NSMutableArray так:

static NSMutableArray *allMyEnemies = [[NSMutableArray alloc] init]; 

int numberOfEnemies = 3; 

for (int i = 0; i < numberOfEnemies; i++){ 
    EnemySpriteClass *enemy = [[EnemySpriteClass alloc] init]; 
    [allMyEnemies addObject:enemy]; 
    [self addChild:enemy]; 
} 

Затем, когда вы хотите посмотреть на/настроить противник спрайт positions- сказать на основном цикле игры, как они нападают на свой герой, используйте следующую команду:

for (int i = 0; i < [allMyEnemies count]; i++) { 
    EnemySpriteClass * obj = (EnemySpriteClass *)[allMyEnemies objectAtIndex:i]; 
    NSLog("Enemy sprite is at this position: x:%f y:%f", 
      obj.position.x, obj.position.y); 
    //Then add logic to adjust that position if needed 
    obj.position.x -= 50;  
} 

проверить на официальном форуме cocos2d для некоторых хороших методов convience, чтобы сделать этот вид управления спрайтов: http://www.cocos2d-iphone.org/forum/topic/5971

+0

Спасибо, Кевин! Ты действительно помог мне :) Подбирал ответ кстати. – Joethemonkey101

0

Вот пример того, что я использую для создания врагов.

В вашем слое добавьте следующие, когда вы хотите, враги должны быть созданы:

Gamelayer.m

int numberOfEnemies = 3; 

for (int i = 0; i < numberOfEnemies; i++){ 
    EnemySpriteClass *enemy = [[EnemySpriteClass alloc] init]; 
    enemy.position = ccp(50 + 50*i, 50); 
    [self addChild:enemy]; 
} 

А затем создать enemey класс на основе CCSprite:

EnemySpriteClass.h

#import "cocos2d.h" 

@interface EnemySpriteClass: CCSprite 
{ 
} 

-(id) init; 

@end 

EnemySpriteClass.m

#import "EnemySpriteClass.h" 

@implementation EnemySpriteClass 

-(id) init 
{ 
    if((self=[super init])) { 
     self = [CCSprite spriteWithFile:@"squid.png"]; 
     //Add AI, life other properties. 
    } 
    return self; 
} 

Если у вас возникли проблемы с производительностью, создавая их на лету, вы всегда можете их создать, а затем вызвать [self addchild: enemy], когда захотите их на экране.

+0

Спасибо за ответ Кевин! Единственное, для позиции я использую совершенно другой метод, потому что я использую TMX Maps. Как я могу убедиться, что у всех разных врагов есть свои собственные позиции? – Joethemonkey101