qq_24548719 2015-07-22 14:16 采纳率: 0%
浏览 2430

cocos2d-x关于addchild的问题,求大大帮忙。。。

今天我在看龙灵修老师的cocos2d-x手游开发实战练习,别踩白块儿的视频。

(抱歉我没有权限发URL链接。。。)

在视频的后面我遇到了一个难题。PS:我用的时win7 32bit VS2012写的Cocos
auto normal_label = LabelTTF::create(normalTTF,"Marker Felt.ttf",40);addChild(normal_label);
addChild(normal_label);

简而言之,龙老师新建了一个标签。

auto normal_button = MenuItemLabel::create(normal_label);

然后给这个标签添加了一个MenuItem。

然后问题出现了,我也像他这么写的,程序编译通过,但是运行的时候崩溃了,抛出异常:child->_parent == nullptr。

我访遍各大论坛,问答网站,从百度知道到csdn,从知乎到cocoChina,最后去了Stack overflow。

只看到有人提出这个问题,但是并没有解答。

然后我做了实验:

addChild(normal_label);

auto normal_button = MenuItemLabel::create(normal_label);

这两句话不能同时共存,否则程序崩溃。

研究了半天,到晚上都没有结果。

下面是我的测试结果,供大家参考一下,帮我解决这个问题:

normal_label的内存地址 :0*07dbb440。

我用单步调试,进入了

addChild函数
两次F11之后到了这里
CCASSERT(child != nullptr, "Argument must be non-nil");
CCASSERT(child->_parent == nullptr, "child already added. It can't be added again");
(这里就是抛出异常的地方,其实我很纳闷,为什么抛出的异常是child->_parent == nullptr,而不是child already added. It can't be added again)
因为第一次嘛,断言通过,继续深入,开始实现addChild操作。
在添加孩子之后,执行了一个void Node::setParent(Node * parent)函数
_parent = parent;

然后我直接跳出了addchild函数
这是显示:
normal_label->_parent的内存地址 :0*07b49270。

然后我F11进入了
auto normal_button = MenuItemLabel::create(normal_label);
在create函数里面经过n次跳转之后,我竟然发现,函数进了addChild()函数,也就是说create底层调用了addchild函数,
当然结果和上面一样,

不过这一次程序死在了断言
CCASSERT(child != nullptr, "Argument must be non-nil");
CCASSERT(child->_parent == nullptr, "child already added. It can't be added again");
直接抛出了异常,

随后我又将
auto normal_button = MenuItemLabel::create(normal_label);
addChild(normal_label);
调转了顺序,可是结果一样,但是这两句话只有注释掉了一句就行了。

简而言之,这个程序调用了两次 addChild(normal_label);
第二次就会报错。

然而我并不知道怎么解决,为什么龙灵修老师的视频里面就没有报错,到我这里就出错了。
求各位大大帮我看看。。。。。。。。。。。。。。。图片说明

  • 写回答

2条回答 默认 最新

  • Evankaka 博客专家认证 2015-07-23 00:40
    关注

    addChild(normal_label);

    auto normal_button = MenuItemLabel::create(normal_label);
    这里相当调用了相次addChild,normal_label只能用一次,所以当然会出错,方法就是clone一个就来操作
    另外,所有的动作也是一样,只能给一个精灵用!其它想用就得clone.这是Cocos2dx自已的内存管理机制。

    评论

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程