rabbit-dev

現役スマフォプログラマーが適当にプログラム関係の記事を放り込むブログ

Cocos2dx onEnterまでにpauseしてもrunActionで実行したアニメーションは止まらない!

ちょっとハマったのでメモしておきます。

cocos2dxでLayerのinitとかでpauseを使ってアニメーション止めようとしても画面上では止まりません。

これはNodeのonEnter時にresumeを実行しているためだと思います。

initでpauseしてもその後のonEnterで実行されるresumeで再開されてしまうフローです。

 

NodeのonEnter抜粋

void Node::onEnter()
{
    if (_onEnterCallback)
        _onEnterCallback();

#if CC_ENABLE_SCRIPT_BINDING
    if (_scriptType == kScriptTypeJavascript)
    {
        if (ScriptEngineManager::sendNodeEventToJS(this, kNodeOnEnter))
            return;
    }
#endif
    
    _isTransitionFinished = false;
    
    for( const auto &child: _children)
        child->onEnter();
    
    this->resume();
    
    _running = true;
    
#if CC_ENABLE_SCRIPT_BINDING
    if (_scriptType == kScriptTypeLua)
    {
        ScriptEngineManager::sendNodeEventToLua(this, kNodeOnEnter);
    }
#endif
}

対策

onEnterでLayer::onEnter実行後にpauseしてやればOKです。
void TitleScene::onEnter(){
    Layer::onEnter();
    mNode->pause();

}  

 

これでmNodeに設定したrunActionが止まります。