在我的C ++ / Cocos2d-x代码中,我有一些自定义的Cocos2d操作;就我而言,继承CCActionInterval
或CCActionInstant
的类。我注意到Cocos2d-x版本1.0.1和版本2.0之间的区别在于如何调用这些类的更新方法。在升级之前,更新方法始终至少调用一次,时间= 1.0。从我现在看到的,在2.0版本中,即时动作的更新方法仅在time = 0时调用一次。总是如此吗?我可以假设,在版本2.0中,在继承CCActionInstant
的类中,更新方法只会被调用一次,时间值将始终为零吗?
答案 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()
。毫不奇怪,isDone()
中的CCActionInstant
方法总是返回true,因此在排除一次后总会被删除:)。