关于用CCTargetedAction封装CCToggleVisibility的问题

大家好,
我在使用CCTargetedAction封装CCToggleVisibility的时候遇到了CCToggleVisibility连续执行两次的问题,请问大家是否遇到过,又是如何解决的,谢谢。
我的版本是V2.2
我的代码示意如下:
CCAction* action = CCTargetedAction::create(
animate_targeted,
CCToggleVisibility::create());
//…
runAction(action);

执行时发现只要这个action之前没有其他动作,那么这个action就会被执行两次。
根据源代码分析,原因大概如下:

首先,CCToggleVisibility的实例创建后,它的m_fDuration属性的值是0。
然后,CCTargetedAction的实例创建后,它的m_fDuration的属性值根据CCToggleVisibility::m_fDuration的值来确定如下:
if (m_fDuration == 0)
{
m_fDuration = FLT_EPSILON;
}

动作在执行时,CCActionManager首先调用step方法,其中的调用链也列在下面。
m_pCurrentTarget->currentAction->step(dt);
CCActionInterval::step.
CCTargetedAction::update.
CCToggleVisibility::update.
这里,m_elapsed的值是0,m_fDuration的值是FLT_EPSILON,虽然是一个很小的值,打印出来也是0,但是实际上m_elapsed < m_fDuration。
CCToggleVisibility是InstantAction,它不会修改m_elapsed属性的值。

所以在接下来CCActionManager的判决
m_pCurrentTarget->currentAction->isDone()
CCActionInterval::isDone.
m_elapsed = 0
m_fDuration = FLT_EPSILON
m_elapsed >= m_fDuration = FALSE。

于是,下一轮ActionManager会认为当前的CCTargetedAction还没有执行完,还会执行一次。
这样,实际上将CCToggleVisibility执行了两次。

请问大家,我在哪里做错了什么?还是说,用一个IntervalAction来打包InstantAction本身就是错误的做法?