我想更改 Sprite 的父级,使用旧父节点中的oldparent->removeChild(child),然后在子 Sprite 中使用child->setParent(newparent),将新父级作为参数传递。还尝试了 newparent->addChild(child) 。
问题是子项的位置在该操作后没有改变。我希望看到子 Sprite 将其位置更改为相对于父变换的新位置。 这是预期的行为还是我需要调用一些更新方法来强制刷新子转换?
最佳答案
昨晚我终于发现问题了。在我决定在将子项添加到新父项之前添加子项->removeFromParentAndCleanup() 后,就会发生这种情况。 此时,程序崩溃了,gdb 中没有更多线索。 这让我怀疑无效的内存问题..(也许当 child 看到它是孤儿时,它会在后台被删除?):所以我尝试:
child->retain();
child->removeFromParent();
newparent->addChild(child);
child->release();
崩溃和相对位置更新的问题都消失了!
关于c++ - setParent addChild 似乎没有刷新 cocos2d-x 3.6 中的子级位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301539/