0

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)

// - 結果としてタイプミスと誤った出力を反映するように編集されました

4

1 に答える 1

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 サブクラスを使用しているため、一部の名前が異なります。

于 2013-04-23T23:31:50.463 に答える