复制CCSprite

时间:2010-12-28 01:32:12

标签: copy cocos2d-iphone duplicates sprite

我正在寻找已经被子类化的CCSprite的许多重复或克隆。它是我游戏中的敌人角色,我需要无数次复制它。我怎么能这样做?

我被告知我应该制作一个EnemyFactory类,让敌人成群结队,并将它们存储在游戏的后续级别。

如果有人可以请我解释一下,我将不胜感激:)

2 个答案:

答案 0 :(得分: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];
}

然后当你想要查看/调整敌人的精灵位置时 - 比如主攻击循环,因为他们正在攻击你的英雄,请使用以下内容:

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论坛,了解一些很好的方法来进行这种精灵管理: http://www.cocos2d-iphone.org/forum/topic/5971

答案 1 :(得分: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];
}

然后根据CCSprite创建一个enemey类:

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]。