求帮助,cocostudio中图片UI替换其中的图片,有代码可以移除精灵,加入精灵出错

Layout* myLayout = (Layout*)GUIReader::shareReader()->widgetFromJsonFile(“NPCUI/NPCUI_1.ExportJson”);
addChild(myLayout);
Sprite* npc = (Sprite*)myLayout -> getChildByName(“npcimg”);
myLayout -> removeChild(npc);
帮忙看下上面的代码,运行没问题,显示的精灵可以被移除但是我想直接替换精灵里的图片。
上面的精灵是个图片,如果可以直接替换精灵UI里面的图片和者删除精灵UI里面的图片应该怎么写,最好是直接替换,不用来回移除新加精灵。
用的是cocostudio上放一个图片UI,是空的。想在载入场景的时候在图片UI上加入事先纯入缓存的.plist,在缓存找图片名。
还有下面的精灵因为上面removeChild了,下面新加一个但是myLayout -> addChild(sprite); 就出错
写成addChild(sprite);就可以为啥?
Sprite* sprite =Sprite::createWithSpriteFrameName(“2.jpg”);
sprite->setPosition(Point(size.width0.5+100,size.height0.5));
myLayout -> addChild(sprite);

对了,为什么想直接替换呢,因为在cocostudio中创建的图片UI的位置固定,然后替换图片不用写UI位置!!!

您好,removeChild方法默认会把内存清理掉,请注意添加第二个参数。如果需要移动这个可以使用直接替换纹理的方式解决。

大侠怎么写啊给个例子吧。

文理是imageview这个吗?我用过也不行啊

还有你说的直接替换文理是直接替换cocostudio中的图片UI上的文理吗

imageview直接使用 imageView->loadTexture(“xxxx.png”);加载一个纹理。

感谢版主大侠,可以了
刚开始接触cocos2dx,有很多函数不知道。以后还要麻烦大侠啦

Layout* myLayout = (Layout*)GUIReader::shareReader()->widgetFromJsonFile("NPCUI/NPCUI_1.ExportJson");  
addChild(myLayout);
npc = (ImageView*)myLayout -> getChildByName("npcimg");

这个是正确的,以前用的是Sprite npc ;定义是所以从出错,看了你的代码我才知道转成ImageView
别的很多帖子都是用Sprite 类似下面的,很坑。
addSpriteFramesWithFile:@“MineSweeping.plist”];
//从帧缓存中取出Default.png
CCSpriteFrame* frame2 = spriteFrameByName:@“Default.png”];
;

还有个问题,你写的这段代码是直接读本地图片吧?如果读缓存里的图片呢?
Layout* myLayout = (Layout*)GUIReader::shareReader()->widgetFromJsonFile(“NPCUI/NPCUI_1.ExportJson”); 这句是吧生成的.plist里的图给缓存了吧?怎么读缓存的?

cocos2d-iphone和2d-x还是有一定差距的,请多多参考cocos2d-x版本的教程。

cocos的内存管理是只加载同一个文件一次的,这里虽然是路径,但是会被记录,如果内存以及有了就不会再加载了。

大侠你可能没明白我的意思
Layout* myLayout = (Layout*)GUIReader::shareReader()->widgetFromJsonFile(“NPCUI/NPCUI_1.ExportJson”); 这句是把生成的.plist里的图给缓存了吧?就是缓存里有了一个大图的.png,里面有好多小图。
下面这句话直接换文理,但是路径是const char,必须图片的名字。就是NPCUI路径下由好多小图才可以。
imageview直接使用 imageView->loadTexture(“xxxx.png”);加载一个纹理
所以我想问的是加载缓存的方式怎么直接使用文理替换??
请大侠指教!

请问您是想加载内存中的一个plist合图中的一个小图么?

是啊是啊,就是想加载内存中的一个plist合图中的一个小图
imageView->loadTexture(“xxxx.png”);只认实际路径下的文件名。。。
imageView是个图片用上面的方法是换图片,你教我的,但是换图片的时候这个方法只能是本地路径下的图片名字
但是我是用plist加载到缓存里了的图片,想找其中一个小图,加载到imageView得到换图片的效果

这个需要传第二个参数为UI_TEX_TYPE_PLIST。

就是写上就行是吧,谢谢大神,你对函数了解的太清楚了。如果有各个函数的使用方法的教程就好了。

最近在加,大家可以先参考testcpp

很感谢,刚刚借贴解决了一个类似的问题,网上的其他方法和这种情况不一样,一直照着那种方法试,坑了很久