2012-11-20 62 views
1

在我的C++/Cocos2d-x代碼中,我有一些自定義的Cocos2d操作;在我的情況下,類繼承CCActionIntervalCCActionInstant。我注意到Cocos2d-x版本1.0.1和版本2.0之間在如何調用這些類的更新方法上的區別。在升級之前,更新方法總是在time = 1.0時至少調用一次。從我現在看到的2.0版本中,即時動作的更新方法僅在time = 0時被調用一次。它總是如此嗎?我可以假設,在版本2.0中,在繼承CCActionInstant的類中,更新方法只會被調用一次,時間值將始終爲零?Cocos2dx 2.0中的自定義操作更新方法

回答

0

我會先說這個,我不認爲你應該擔心這樣的實現細節。當你劃分CCActionInstant時,你總是可以假設你的子類是一個即時動作。如果將來實現的細節發生了變化,他們可能會讓這個類變得更好,並且你的子類應該表現得更好。這就是說,你可能有理由擔心這個實現細節,所以,這裏是一個擴展的答案。

只要你不更新你的庫,你可以認爲它總是在時間0被調用。 Cocos2d-x非常動態,並且根據cocos2d-iphone版本而改變,所以更改必然會發生。


在cocos2d v2.0中,所有操作都由CCActionManager類管理。因此,通過檢查類,你可以看到:

// main loop 
void CCActionManager::update(float dt) 
{ 
... 
    if (m_pCurrentTarget->currentAction->isDone()) 
    { 
     m_pCurrentTarget->currentAction->stop(); 

     CCAction *pAction = m_pCurrentTarget->currentAction; 
     // Make currentAction nil to prevent removeAction from salvaging it. 
     m_pCurrentTarget->currentAction = NULL; 
     removeAction(pAction); 
    } 
} 

正如你所看到的,removeAction被稱爲當isDone()是真實的。毫不奇怪,CCActionInstant中的isDone()方法總是返回true,因此在刪除一次後總會被刪除:)。

+0

謝謝。爲了澄清,每個動作總是隻有一次即時動作的更新方法(而不是間隔動作)? – FireAphis

+0

@FireAphis對不起,我以爲你確認了這一點。是的,打了一次電話。我會更新我的答案。 – Mazyod

相關問題