Node节点操作问题

添加删除子节点只能在主线程中进行吗?我要接受网络消息,根据网络消息来决定是否要removeChild,但程序在removeAllChildren时经常会出错 :Unknown commands in renderQueue
然后程序中断到

void GLProgramState::applyGLProgram(const Mat4& modelView)
{

CCASSERT(_glprogram, “invalid glprogram”);


程序的调用堆栈如下:
libcocos2d.dll!cocos2d::GLProgramState::applyGLProgram(const cocos2d::Mat4 & modelView) 行 340 C++
libcocos2d.dll!cocos2d::GLProgramState::apply(const cocos2d::Mat4 & modelView) 行 333 C++
libcocos2d.dll!cocos2d::QuadCommand::useMaterial() 行 98 C++
libcocos2d.dll!cocos2d::Renderer::drawBatchedQuads() 行 790 C++
libcocos2d.dll!cocos2d::Renderer::flush2D() 行 828 C++
libcocos2d.dll!cocos2d::Renderer::flush() 行 822 C++
libcocos2d.dll!cocos2d::Renderer::render() 行 530 C++
libcocos2d.dll!cocos2d::Scene::render(cocos2d::Renderer * renderer) 行 162 C++
libcocos2d.dll!cocos2d::Director::drawScene() 行 291 C++
libcocos2d.dll!cocos2d::DisplayLinkDirector::mainLoop() 行 1298 C++
libcocos2d.dll!cocos2d::Application::run() 行 94 C++
MailiLand.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) 行 17 C++

想问大神么,怎么解决添加删除节点和渲染线程的类似的并发问题?

本人菜鸟,问题太简单了,麻烦也给指点一下嘛:6:

可以使用定时器,把你要做的删除和创建的操作延时一会放在主线程来做,你那样做经常会挂掉

我也遇到这个问题了,求教啊

请问解决了么?

能再详细说下么?

节点、渲染之类的操作尽(quan)量(bu)在主线程里做

我的情况是这样的
socket,这个是接受网络消息的 (socket类)
work scene,这个是我的执行的场景 (work类)
在这个场景中,我new 一个layer, 做了一个chatboard层(chatboard类)
chatboard里面会有scroll_view和大量richtext
我socket收到数据后,先通过单件存储数据,然后postnotify给work scene
work 把消息,add到chatboard的一个队列里去
现在我chatboard里,每次show所有richtext时候,先会把 所有children移除掉
现在说的是这个不合理?我和楼主一样发生各种崩溃,或者在楼主这里,或者node visit时候,node为空
我应该做的,是从work scene里移除所有子节点么?
从work scene里把整个scroll view移除?是这样设计么?

2赞

谢谢版主大人,我再想想