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);
实测可行。欢迎讨论