Cc.SpriteBatchNode 在parent执行cc.MoveTo动作后位置有问题的Work around

Hi, 如题看上去是一个Bug,cc.SpriteBatchNode中添加Sprite后,如果 SpriteBatchNode的父节点执行了MoveTo操作且动作完成后,可能会导致SpriteBatchNode并没有渲染到正确的新位置上,即使log中显示其位置是正确的。该issue并不能100%重现。如果有谁也发现类似问题可以提供更多线索。

直接上代码:


//被执行动画的父节点
var l_parentLayer=new cc.Layer();
        l_parentLayer.setPosition(0,0);
        this.addChild(l_parentLayer);
        //Batch
        var l_batchNode=new  cc.SpriteBatchNode("my_res_01");
        l_batchNode.setPosition(0, 0);
        l_parentLayer.addChild(l_batchNode);
        //对照组普通的Sprite: 我的测试中,当使用资源和batch相同时没有发现问题,使用资源不同时,反复执行Move动作,有概率触发
        var l_normalSprite=new cc.Sprite("my_res_02",cc.rect(0,0,76,76));
        l_normalSprite.setPosition(400, 0);
        l_parentLayer.addChild(l_normalSprite);
        
        for(var i=0;i<5;i++){
            for (var j=0;j<5;j++){
                var l_offset=((i+j)%2)*76;
                var l_batchSprite=new cc.Sprite(l_batchNode.getTexture(),cc.rect(l_offset,0,76,76));
                l_batchSprite.setPosition(76*i,76*j);    
                l_batchNode.addChild(l_batchSprite);
            }
        }
       
        var l_actMove=cc.moveTo(2.0,cc.p(0,300));
        l_parentLayer.runAction(l_actMove);
//执行完动作后,有概率可以看到l_normalSprite和l_batchSprite相对位置变了,虽然log显示的值都是正确的

如果你也发现这种情况,对这个问题的一个Work around是:在l_actMove执行后回调一个callback,其内容如下:


l_batchNode.setVisible(false);
l_batchNode.setVisible(true);

实测可行。欢迎讨论

PS. 环境:
cocos2dx- js: v3.2-rc0
chrome(mac): 39.0.2171.95(64bit)