大家都知道在cocos2dx中,子线程不能用于更新主界面,更新界面是主线程的事,现在我也碰到一个这样的问题,
问题:
子线程中不断接受服务器发过来 的信息,但是我要根据这些信息去创建一些人物,但是在子线程中调用创建方法,界面中显示不出来 ,我想过很我办法,以下两种方法都是我采用的,但是都解决不了这个问题:
1:CCNotificationCenter,很多人都说用这个,我也用了,消息可以发过去,但是还是创建不了人物了来。
2:创建一个queue消息队列,而子线程收到服务器消息后,就把消息加入到这个队列中去,而主线程定时的去轮询这个消息队列,当取到消息后就执行,这个方式很不错,但是还是不能在界面上添加一个人物,方法依然能执行,人物依然不能创建 。
在这里,我想请各位大神,有什么好的解决办法。。。。。。。
以下是一段简单的CCNotificationCenter测试代码,但是这段代码是不能在主界面中添加人物的:
// 1: 添加观察者
CCNotificationCenter::sharedNotificationCenter()->addObserver(this,callfuncO_selector(HelloWorld::test),“socket”,NULL);
// 2: 创建数据读取线程
pthread_t pid;
pthread_create(&pid, NULL, HelloWorld::messageRciveThread, this);
//3: 创建线程函数
void* HelloWorld::messageRciveThread(void *ptr)
{
//在线程中发送消息,— 很多人都说这一行代码 是子线程向主线程发送消息。可我认为还在子线程中。
CCNotificationCenter::sharedNotificationCenter()->postNotification(“socket”,NULL);
}
//4: 执行的方法
void HelloWorld::test(cocos2d::CCObject *pObject)
{
CCSprite *sprite = CCSprite::create(“HelloWorld.png”);
sprite->setPosition(ccp(500,300));
this->addChild(sprite);
CCLog(“addCHild…”); //----》 这一行代码能打印出来 ,可是主界面中,就是没有图片。
}
希望高手能帮我解决一下。。。。。。