2011-03-03 4 views
3

나는 내가 쓴 게임이있다. 나는 그것을 완료라고 부르겠다. 그러나 나는 버그를 발견했다. 기본적으로 게임은 더 오래 플레이 할수록 느려집니다. 내 생각 엔이 여전히 화면에서 그려진 스프라이트 때문입니다. 아래에 코드를 붙여 넣으 려하지만 기본적으로 스프라이트는 "addNewBall"메서드에서 만들어집니다. 이 방법에서는 모션을 계산하는 배열에 추가됩니다. 볼이 화면에서 벗어난 위치에 도달하면 배열에서 제거되어 움직이지 않게되지만 여전히 화면에서 "그려진"상태입니다. 프로세서가 더 이상 스프라이트를 계산하지 않도록 스프라이트를 제거하려면 어떻게해야합니까? 도와 주셔서 미리 감사드립니다.화면 cocos2d 아이폰에서 스프 라이트를 제거 하시겠습니까?

태너

코드 :

-(void) addNewBall { 
    NumberOfBalls = NumberOfBalls + 1; 

    int RandomXPosition = (arc4random() % 240) + 40; 
    NSString *BallFileString = @"OrangeBall.png"; 

    switch (arc4random() % 5) { 
     case 1: 
      BallFileString = @"OrangeBall.png"; 
      break; 
      case 2: 
       BallFileString = @"GreenBall.png"; 
       break; 
      case 3: 
       BallFileString = @"YellowBall.png"; 
       break; 
      case 4: 
       BallFileString = @"PinkBall.png"; 
       break; 
      case 0: 
       BallFileString = @"BlueBall.png"; 
       break; 
    } 


    Ball = [CCSprite spriteWithFile:BallFileString]; 
    Ball.position = ccp(RandomXPosition, 520); 

    BallIsMoving = YES; 
    [self addChild:Ball z:10]; 
    [AllObjectsArray_ addObject:Ball]; 
    [BallArray_ addObject:Ball]; 

} 


//And here is where it is removed... 


if (Ball.position.y <= -100) { 

[BallArray_ removeObject: Ball]; 
} 

답변

8

당신은 당신의 제거 방법 몇 가지 조건이 누락 된 것으로 보인다. y 위치가 화면 높이보다 큰 경우 또는 x 위치가 스크린 외부에있는 경우 공을 제거하지 않겠습니까? 어쨌든, 당신은 배열에서 볼을 제거하고 같은 장소에, 당신은 추가해야합니다 :

[self removeChild:Ball cleanup: YES] 
나는 또한 당신은 모든 공을 추가하고 이후 BallArray가, 아마 중복 지적한다

어쨌든 다른 노드로. 해당 노드의 하위 노드가 Ball이면 children 속성을 사용하여 볼 배열을 가져올 수 있습니다. 이 경우 하위 배열은 다음과 같습니다. self.children (자세한 내용은 http://www.cocos2d-iphone.org/api-ref/latest-stable/interface_c_c_node.html#a5e739ecda0c314283a89ac389dfca2fa을 참조하십시오.)

동일한 노드에 공이 아닌 자식이있는 경우 중간 노드를 추가하여 설계를 단순화하여 하나의 배열을 덜 사용할 수 있습니다.

+0

아니, 나는 많은 노드에있는 아이들, 그리고 행동 할 수있는 사람이 같은 배열에 있습니다. 도와 주셔서 감사합니다!! –

+0

도움이 될 수있어서 기쁩니다. 문제가 해결되면 미래의 독자를 위해이 대답을 수락 된 것으로 표시해야합니다. –

1

당신은 당신의 스프라이트를 지정해야합니다, 당신은이 다음 줄 .. 사용할 수 있습니다 [자체로 removeChild : 볼 정리 : YES]를

관련 문제