2

スプライトが壁にぶつかったかどうかを確認できるように、スプライトを追加したいNSMutableアレイがあります。私はそうするためにこのコードを使用します:

NSString *bulletName = [NSString stringWithFormat:@"tank%d_bullet.png", _type];
bullet = [CCSprite spriteWithSpriteFrameName:bulletName];
bullet.tag = _type;
bullet.position = ccpAdd(self.position, ccpMult(_shootVector, _turret.contentSize.height));        
CCMoveBy * move = [CCMoveBy actionWithDuration:duration position:actualVector];
CCCallBlockN * call = [CCCallBlockN actionWithBlock:^(CCNode *node) {
    [node removeFromParentAndCleanup:YES];
}];

if (!bulletIsGone) {
    [self schedule:@selector(updator:) interval:0.01];

}
else {
    [self unschedule:@selector(updator:)];
}
[bullet runAction:[CCSequence actions:move, call, nil]];
[_layer.batchNode addChild:bullet];
[bulletsArray addObject:bullet];
if ([bulletsArray objectAtIndex:0] == nil) {
    NSLog(@"HELP");
}
NSLog(@"%@", [bulletsArray objectAtIndex:0]);


}

-(void)updator: (ccTime) dt{

for(CCSprite *bulletz in bulletsArray){
    NSLog(@"this is the for loop");
    CGRect rect1 = CGRectMake(bulletz.position.x - bulletz.contentSize.width/2, bulletz.position.y - bulletz.contentSize.height/2, 20, 20);
    if ([_layer isWallAtRect:rect1]) {
        NSLog(@"bulletHitWall");
        [_layer.batchNode removeChild:bulletz cleanup:NO];
        bulletIsGone = YES;
    }
}

}

ただし、ビルドして実行すると、「(null)」と「HELP」のコンソール出力が表示されます。'updator'の前のメソッドは、touchesEndedから呼び出されます。誰かが私が間違っていることを見ることができますか?ありがとうございました!

4

3 に答える 3

3

アレイを初期化しますか?それが最も可能性の高い理由のように思われる

viewDidLoadメソッドでこれを試してください...

- (void)viewDidLoad
{
  [super viewDidLoad];

  bulletsArray = [NSMutableArray alloc] init];
}
于 2012-07-17T00:49:33.117 に答える
2

オブジェクトをNSMutableArray保持できないため、条件の唯一の方法nil

[bulletsArray objectAtIndex:0] == nil

評価できるのtrueはそれbulletsArrayですnil。アレイが適切に割り当てられていることを確認する必要があります。それを行う典型的な場所は、クラスの指定された初期化子です。

于 2012-07-17T00:49:57.430 に答える
1

なぜ別の配列に弾丸を追加したいのですか?であるすべてを含むバッチノードがすでにあります_layer.children

配列自体(bulletsArray)がnilではないことを確認しますか?どこで初期化されますか?

最後に、よりパフォーマンスの高いCCARRAY_FOREACHを使用したループを検討する必要があります。

于 2012-07-17T00:51:39.580 に答える