通过Cocos2d中的迭代器从CCSprite子类检索时,CCSprite位置不稳定

时间:2013-04-23 22:06:19

标签: cocos2d-iphone iterator kobold2d

我是CCSprite的子类。 (最初是CCNode的子类,但有同样的问题)

来自EnemyShip.h的

@interface EnemyShip : CCSprite
- (id)initWithFile:(NSString *)file health:(int)health;

@property (nonatomic, assign) NSInteger health; 

@end

@interface easyShip : EnemyShip
- (id)init;
@end
来自EnemyShip.mm的

@implementation EnemyShip

@synthesize health;

- (id)initWithFile:(NSString *)file health:(int)h
{
    if ((self = [super initWithFile:file])) {
        self.health= h;
        self.position=[CCDirector sharedDirector].screenCenter;
}
return self;
}

@end

@implementation easyShip

- (id)init{
    if ((self = [super initWithFile:@"enemy_side_hole.png" health:100])){}
    return self;
}

@end

一切都很基础。我通过以下方式添加这个敌人:

-(void) addEnemy:(CGPoint)p
{
    EnemyShip *enemyShip = [[easyShip alloc]init];
    [self addChild:enemyShip z:0]; 
}

所以我在更新方法中进行碰撞检测。 (再次 - 一旦这个工作,我将使用精灵属性等子类化CCNode等)

for(EnemyShip* theEnemies in [self children])
{
    NSLog(@"x,y: (%f,%f)",theEnemies.position.x,theEnemies.position.y);
}

我理解上面所做的就是访问我作为孩子添加的所有'EnemyShip'并记录它的位置。确实如此。除了位置到处都是 - 尽管我可以看到精灵没有移动到任何地方,同一个.position.x / y上的类的NSLog输出正确的协调员。

我的输出是:

2013-04-23 23:24:48.122 Radon[9209:907] x,y: (0.000000,0.000000)
2013-04-23 23:24:48.130 Radon[9209:907] x,y: (768.000000,512.000000)
2013-04-23 23:24:48.131 Radon[9209:907] x,y: (384.000000,512.000000)
2013-04-23 23:24:48.134 Radon[9209:907] x,y: (192.000000,512.000000)
2013-04-23 23:24:48.135 Radon[9209:907] x,y: (600.000000,30.000000)
2013-04-23 23:24:48.135 Radon[9209:907] x,y: (525.000000,30.000000)
2013-04-23 23:24:48.136 Radon[9209:907] x,y: (450.000000,30.000000)
2013-04-23 23:24:48.138 Radon[9209:907] x,y: (375.000000,30.000000)
2013-04-23 23:24:48.139 Radon[9209:907] x,y: (300.000000,30.000000)
2013-04-23 23:24:48.140 Radon[9209:907] x,y: (225.000000,30.000000)
2013-04-23 23:24:48.142 Radon[9209:907] x,y: (162.000000,512.000000)

// - 编辑以反映拼写错误输出

1 个答案:

答案 0 :(得分:0)

我使用了另一种方法,因为我需要快速完成。

添加了

NSMutableArray enemies;

创造'敌人':

EnemyShip *enemyShip = [[EnemyShip alloc]init];
[enemies addObject:enemyShip];
[self addChild:enemyShip z:0];

专门迭代这个而不是抓住另一种方式:

for(NSUInteger i=0;i<[enemies count];i++){
    EnemyShip* enemy = [enemies objectAtIndex:i];
    NSLog(@"x,y: (%f,%f)",enemy.sprite.position.x,enemy.sprite.position.y);
}

工作正常。

注意:^使用包含CCSprite而不是CCSprite子类的CCNode子类,因此某些名称不同。