怎么在一段moveTo动画播放完后,更换该节点父节点

var moveAction = cc.moveTo(0.5, cc.p(290, 180 - 13 * this.iFlag / 3));
newCard.runAction(moveAction);
newCard.parent = this.rightLayout;
这样写的话会先替换父节点后移动,想要的效果是移动完成后替换父节点。求教各位大神。。。

var moveAction = cc.moveTo(0.5, cc.p(290, 180 - 13 * this.iFlag / 3));
var sequenceAction = cc.sequence(moveAction, cc.callFunc(() => {
    newCard.parent = this.rightLayout
});
newCard.runAction(sequenceAction);

这种方法过程看起来确实先执行移动后执行添加,但结果还是会和添加后再移动相同。

你是想更换父节点后保持在屏幕上的位置吗?那要自己计算一下相对的坐标

2赞

var moveAction = cc.moveTo(0.5, cc.p(290, 180 - 13 * this.iFlag / 3));
var sequenceAction = cc.sequence(moveAction, cc.callFunc(() => {
newCard.parent = this.rightLayout
newCard.setPosition(0, 0);
});
newCard.runAction(sequenceAction);
我给里面加了句,实现想要的效果了,谢谢!

你说的很对

var moveAction = cc.moveTo(0.5, cc.p(290, 180 - 13 * this.iFlag / 3));
var sequenceAction = cc.sequence(moveAction, cc.callFunc(() => {
var pos1 = newCard.convertToWorldSpaceAR(cc.p(0,0));
newCard.parent = this.rightLayout;
var pos2 = this.rightLayout.convertToNodeSpaceAR(pos1);
newCard.setPosition(pos2)
});
newCard.runAction(sequenceAction);
这样才能万无一失,设置坐为(0,0),只能在少数情况下有效,只能在你需要设置newCard位置为父节点锚点所在位置情况下才能保留在屏幕上的位置

3赞