在我的 C++/Cocos2d-x 代码中,我有一些自定义的 Cocos2d 操作;在我的例子中,类继承CCActionInterval
或CCActionInstant
. 我注意到 Cocos2d-x 版本 1.0.1 和版本 2.0 之间的区别在于如何调用这些类的更新方法。在升级之前,更新方法总是至少调用一次时间=1.0。从我现在看到的情况来看,在 2.0 版本中,即时操作的更新方法仅在 time=0 时调用一次。总是这样吗?我可以假设,在 2.0 版中,在继承类CCActionInstant
中,更新方法只会被调用一次,并且时间值总是为零吗?
问问题
1083 次
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);
}
}
如您所见,removeAction
当isDone()
为真时调用。毫不奇怪,中的isDone()
方法CCActionInstant
总是返回 true,因此在执行一次后总是被删除:)。
于 2012-11-20T10:49:43.607 回答