c++ - setParent addChild 似乎没有刷新 cocos2d-x 3.6 中的子级位置

标签 c++ cocos2d-x cocos2d-x-3.0 ccsprite ccnode

我想更改 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/

相关文章:

ios - 在 Swift 项目 (XCode 6.3) 中集成 Cocos2dx 项目

c++ - 英特尔 TBB 与 CilkPlus

c++ - RegLoadKey 给出错误代码 5(拒绝访问)

c++ - 为此 directshow 系统创建一个自定义类,无法弄清楚如何

c++ - (cocos2d-x 3.2/xcode 6) 如何打开 iOS 的 cpp-tests,没有项目文件

cocos2d-x - RapidJson : How to get all Key_names from a JSON? (cocos2dx)

c++ - 如何在cocos2d-x中切换两个场景?

ios - Cocos2d iPHone SDK ccPhysicsCollisionPreSolve 在访问对象属性时崩溃

c++ - 分析编译时间

c++ - 使用 Cocos2d-x 3.2 的 EditBox 文本对齐