Cocos2dx 2.0中的自定义操作更新方法

时间:2012-11-20 08:15:24

标签: cocos2d-iphone cocos2d-x

在我的C ++ / Cocos2d-x代码中,我有一些自定义的Cocos2d操作;就我而言,继承CCActionIntervalCCActionInstant的类。我注意到Cocos2d-x版本1.0.1和版本2.0之间的区别在于如何调用这些类的更新方法。在升级之前,更新方法始终至少调用一次,时间= 1.0。从我现在看到的,在2.0版本中,即时动作的更新方法仅在time = 0时调用一次。总是如此吗?我可以假设,在版本2.0中,在继承CCActionInstant的类中,更新方法只会被调用一次,时间值将始终为零吗?

1 个答案:

答案 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,因此在排除一次后总会被删除:)。