2013-02-07 150 views
1

所以我的想法是有一個特殊的子彈來凍結敵人,經過一段時間後敵人自己解凍並繼續他們的動作/動畫。這裏是什麼,我做了一個簡單的版本:如何在Cocos2d中暫停和恢復

-(void)update:(ccTime)dt 
{ 
    CCSprite *enemySprite; 
    CCARRAY_FOREACH(enemies, enemySprite) 
    { 
     if (CGRectIntersectsRect(_bullet.boundingBox, enemySprite.boundingBox)) 
     { 
       _bullet.visible = NO; 
       [enemySprite pauseSchedulerAndActions]; 
       enemySprite.pausingDuration = CACurrentMediaTime() +5; 
     } 
     if (CACurrentMediaTime() > enemySprite.pausingDuration) 
       [enemySprite resumeSchedulerAndActions]; 
    } 
} 

現在,這個問題我想我的遭遇是enemySprite有停在這裏更新它的調度程序,以便在下一次更新方法被調用已暫停億韓元enemySprite沒有更新!我希望我知道更好的解釋方法,但我認爲任何專家程序員都會立即看到這段代碼有什麼問題。 請幫我提出改進代碼的建議,甚至只是一個想法,將不勝感激,謝謝你的時間。

回答

3

你叫? :)

是的,pauseSchedulerAndActions以及Director的暫停方法都是實現暫停的蹩腳方式,因爲您無法控制暫停和可以繼續運行的內容(例如暫停菜單層)。

在你的情況下,你至少可以更具體,例如只能暫停行動,但沒有計劃更新:

[enemySprite.actionManager pauseTarget:enemySprite]; 

對於更爲精細的控制,建議不要過分依賴於調度方法每個對象都有一箇中心對象(場景或圖層)將所有更新發送給其子項 - 這樣,您稍後可以更輕鬆地決定哪些子項應該在暫停期間繼續接收更新。

+0

呵呵,你馬上解決我的問題。非常感謝你,你真棒<3 – user1817517

+0

你可能想接受答案:) –

+0

太棒了!我一直在玩AppDelegate類來解決這個問題。有了這個,我所要做的就是在課堂上改變暫停和恢復方法。非常感謝! – user1597438