0

そのため、私のゲームでは、画面の上部からドロップするアイテムがあり、プレーヤー (別のスプライト) がアイテムをキャッチすると、アイテムが消えてカウンターに 1 つ追加されます。

これが私の衝突チェック方法です

//WHEN THE THINGS COLLIDE, THEY DISSAPEAR
- (void)update:(ccTime)dt {
CGSize winSize = [[CCDirector sharedDirector] winSize];

NSMutableArray *targetsToDelete = [[NSMutableArray alloc] init];
for (CCSprite *target in _targets) {
    CGRect targetRect = CGRectMake(
                                       target.position.x - (target.contentSize.width/2),
                                       target.position.y - (target.contentSize.height/2),
                                       target.contentSize.width,
                                       target.contentSize.height);
    BOOL playerHit = FALSE;
        CGRect playerRect = CGRectMake(
                                       _Banker.position.x - (_Banker.contentSize.width/2),
                                       _Banker.position.y -     (_Banker.contentSize.height/2),
                                       _Banker.contentSize.width,
                                       _Banker.contentSize.height);

        if (CGRectIntersectsRect(playerRect, targetRect)) {
            //[targetsToDelete addObject:target];
            playerHit = TRUE;
                [targetsToDelete addObject:target];

            break;

    }

    for (CCSprite *target in targetsToDelete) {
        [_targets removeObject:target];
        [self removeChild:target cleanup:YES];

        _targetsDestroyed++;
        [_label setString:[NSString stringWithFormat:@""]];
        if (_targetsDestroyed > 30) {
            GameWinScene *gameWinScene = [GameWinScene node];
            _targetsDestroyed = 0;
            [[CCDirector sharedDirector] replaceScene:gameWinScene];
        } else{
            NSString *killcounttext = [NSString stringWithFormat:@"Catches: %i",     _targetsDestroyed];
            self.label = [CCLabelTTF labelWithString:killcounttext fontName:@"Zapfino"     fontSize:20];
            _label.color = ccc3(225,225,225);
            _label.position = ccp(winSize.width * 0.20,winSize.height * 0.92);
            [self addChild:_label];
        }
    }

    if (targetsToDelete.count > 0) {
        [targetsToDelete addObject:target];
    }
    [targetsToDelete release];
}
}

ターゲットが targetstodelete に追加されていることを確認するために CCLOG を追加しました。CCLOG は、ターゲットが追加されているが、削除されていないことを確認しました。

これが私の削除方法です

for (CCSprite *target in targetsToDelete) {
        [_targets removeObject:target];
        [self removeChild:target cleanup:YES];

        _targetsDestroyed++;
        [_label setString:[NSString stringWithFormat:@""]];
        if (_targetsDestroyed > 30) {
            GameWinScene *gameWinScene = [GameWinScene node];
            _targetsDestroyed = 0;
            [[CCDirector sharedDirector] replaceScene:gameWinScene];
        } else{
            NSString *killcounttext = [NSString stringWithFormat:@"Catches: %i", _targetsDestroyed];
            self.label = [CCLabelTTF labelWithString:killcounttext fontName:@"Zapfino" fontSize:20];
            _label.color = ccc3(225,225,225);
            _label.position = ccp(winSize.width * 0.23,winSize.height * 0.92);
            [self addChild:_label];
        }
    }

どんな助けでも大歓迎ですが、一部の人々のように「Objective-Cを学びましょう」とだけ言わないでください:/

4

1 に答える 1

0

あなたのコードでは、この行を書いた、

 if (targetsToDelete.count > 0) {
        [targetsToDelete addObject:target];
    }

なぜこれを追加したのか理解できないので、間違いがあると思うので、チェックしてくださいそうでなければ、なぜこのコードを追加したのか説明してください..

于 2012-07-24T13:18:38.820 に答える