1

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

4

1 回答 1

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);
    }
}

如您所见,removeActionisDone()为真时调用。毫不奇怪,中的isDone()方法CCActionInstant总是返回 true,因此在执行一次后总是被删除:)。

于 2012-11-20T10:49:43.607 回答