2013-04-23 51 views
0

我正在繼承CCSprite。 (原文是繼承CCNode,但有同樣的問題)通過Cocos2d中的迭代器從CCSprite子類中獲取CCSprite位置不穩定

從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

我注意到你記錄了x座標兩次,而不是x/y。檢查初始分配後返回的位置。嘗試覆蓋setPosition:(CGPoint)pos並調用super setPosition來更改位置,同時記錄(或設置斷點)以查看位置何時更改以及由誰更改。 – LearnCocos2D 2013-04-23 22:20:09

+0

哎呀,我糾正了錯誤的輸出。 – chillok 2013-04-23 22:24:40

回答

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子類,因此有些名稱是不同的。