cocos代码问题

请把代码粘贴在这里


```
使用ui编辑器,然后里面的子项删除不了。
//代码如下:先设置了tag

 UIImageView* clocksprite = dynamic_cast(gamelayer->getWidgetByName("img_clockbg"));
        clocksprite->setTag(Tags::NODE_CLOCK);


///这里需要删除此对象,gamelayer是层
gamelayer->removeChildByTag(Tags::NODE_CLOCK);

结果并没有删除!!!

你的tag是否有重复呢?如果两个空间tag相同,会出现返回值不正确的情况。

没有重复。因为还有另外一种非常直接的,代码如下:
//这个是继承cclayer的类的初始化init()里,添加一个uilayer层,并且给uilayer设置tag,100
///创建uilayer层
UILayer* player = UILayer::create();
this->addChild(player, 0, 100);

/////////想要获取uilayer的时候,却获取不到,代码如下
UILayer* menulayer = dynamic_cast<UILayer*>(this->getChildByTag(100));
if (!menulayer) {
return;
}

你确定添加到gamelayer里面去了吗?

确定,界面已经画出来了。

请帮我看一下,目前情况是这样的,给添加的子项设置了tag=999,现在删除,结果是场景中依然画出了子项,子项并没有被删除。
代码如下:

    UIImageView* clocksprite = dynamic_cast<UIImageView*>(gamelayer->getWidgetByName("img_clockbg"));
    CCLog("now clocksprite tag is %d\n", clocksprite->getTag());///打印确实是999
    gamelayer->removeChildByTag(999);//

    CCNode* clocknode = gamelayer->getChildByTag(999);
    if (clocknode)
    {
        CCLog("I'm still exist!!!");///没有打印!!这里被删除了。
    }
    
    gamelayer->removeWidget(clocksprite);
    UIImageView* clocksprite1 = dynamic_cast<UIImageView*>(gamelayer->getWidgetByName("img_clockbg"));
    if (clocksprite1) {
        CCLog("uiclock is still exist!!!");///依旧打印!!!
    }

应该就是说,我删除不了使用ui编辑器里创建的子项,之后在代码里添加的子项可以删除。

CCNode* clocknode = gamelayer->getChildByTag(999);
if (clocknode)
{
CCLog(“I’m still exist!!!”);///没有打印!!这里被删除了。
}

应该先检查下获取是否成功。

检查下获取是否成功,是怎么检测? if (clocknode) 已经做了是否获取到的判断了啊?

我的意思是remove之前检查。

重新修改了代码,现在检测,代码如下:

   ///检测是否存在
    CCNode* clocknode = gamelayer->getChildByTag(999);
    if (clocknode)
    {
        CCLog("I'm exist!!!");
    }
    
    ////移除,再次检测是否存在
    gamelayer->removeChildByTag(999);
    if (clocknode)
    {
        CCLog("I'm still exist!!!");
    }
    
    ////获取子项
    UIImageView* clocksprite = dynamic_cast<UIImageView*>(gamelayer->getWidgetByName("img_clockbg"));
    CCLog("now clocksprite tag is %d\n", clocksprite->getTag());
    
    ////通过移除子项的方式移除,并检测子项是否存在
    gamelayer->removeChild(clocksprite);
    if (clocksprite)
    {
        CCLog("clocksprite is still exist!!!");
    }

打印出来的信息显示如下:
Cocos2d: cocos2d: removeChildByTag(tag = 999): child not found!
Cocos2d: now clocksprite tag is 999

Cocos2d: clocksprite is still exist!!!

第一次通过tag999并没有获取到子项,但是之后通过getWidgetByName可以获取子项,并且打印出来的tag是999。

因为有的uilayer我是可以读取到的,所以对比了一下。发现读取不到的uilayer是添加在自己创建的cclayer上,而可以读取出来的是添加是ccscene上。这是为什么呢?版主,方便给个qq交流一下吗?

我的联系方式不是一直在头像上面么·····