2011-03-03 114 views
3

我有一個我寫的遊戲。我即將準備完成,但我發現了一個錯誤。基本上,隨着遊戲時間越長,遊戲越慢。我的猜測是這是由於仍在屏幕上的精靈。我將粘貼下面的代碼,但基本上這個精靈是在「addNewBall」方法中創建的。在這種方法中,它被添加到計算其運動的陣列中。當球到達屏幕後的位置時,它會從陣列中移出,導致它停止移動,但仍然在屏幕上「畫出」。如何刪除精靈,以便處理器不再計算它。在此先感謝您的幫助!從屏幕cocos2d iphone中刪除精靈?

坦納

代碼:

-(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 s,則可以使用其屬性children獲取球的數組。在這種情況下,子數組將爲:self.children(有關更多信息,請參見http://www.cocos2d-iphone.org/api-ref/latest-stable/interface_c_c_node.html#a5e739ecda0c314283a89ac389dfca2fa)。

如果在同一節點上有非Ball子節點,則可能需要添加中間節點以簡化設計,以便您可以使用少一個數組。

+0

沒有,我在那個節點許多孩子,和那些有表現相同的數組也在同一個數組中。感謝您的幫助! – 2011-03-03 02:25:51

+0

很高興爲您服務。如果您的問題得到解決,您應該將此答案標記爲未來讀者的利益:) – 2011-03-03 23:04:25

1

你需要指定你的精靈,你可以使用這個下面的行.. [自removeChild之:球清理:YES]