2012-07-23 1 views
0

그래서 내 게임에서 화면 위쪽에서 항목이 떨어지고 플레이어 (다른 스프라이트)가 항목을 잡으면 항목이 사라지고 카운터에 하나가 추가됩니다.충돌 검사 문제

이 내가 대상이 내 옆에 방법 내가 다음 targetstodelete에서 아무것도 삭제로 인해 targetstodelete에 추가되었는지 확인하는 CCLOG을 추가

//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]; 
} 
} 

방법

확인 내 충돌이다. CCLOG는 대상이 추가되고 있지만 삭제되지는 않았 음을 확인했습니다.

이 어떤 도움에 감사드립니다 그러나 다만 어떤 사람들처럼 "객관적 - C를 배울 이동"말을하지 마십시오 내 삭제 방법

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]; 
     } 
    } 

입니다 :/

답변

0

을 코드에서이 작성 라인,

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

이 추가 왜 이해할 수 없다, 그래서 난이 코드를 추가 왜 그렇게 설명 그렇지 않으면 확인하시기 바랍니다 실수가 있다고 생각 ..

+0

그 다음 방법으로 CCSprite 대상이 targetsToDelete에 있는지 확인하고, 그렇다면 장면에서 대상을 제거합니다. – tyler53

+0

이 루프에서 대상을 얻습니다 (targetsToDelete에서 CCSprite * 대상) { [_targets removeObject : target]; [self removeChild : target cleanup : YES]; ....... 다시 targetToDelete에 대상을 추가하지만 targetsToDelete에서 대상을 제거하고 마지막으로 릴리스 된 [targetsToDelete release] 코드는 없습니다. , 그렇다면 무엇이 의미인가 (targetsToDelete.count> 0) { [targetsToDelete addObject : target]; } – Devang