2012-11-20 89 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

相关问题