首页 > 代码库 > Cocos2d-x 网络线程与UI线程的同步 继承Node但是不执行Update

Cocos2d-x 网络线程与UI线程的同步 继承Node但是不执行Update

在最近的项目中,开始用到网络。

网络通信的话就要有一个循环来接收数据,于是想到直接到Cocos2d-x的主循环中去修改。

Cocos2d-x的主循环在CCDirector的MainLoop函数中,在这里我们可以添加一个NetworkClient::Update()来执行网络通信的循环。

但是这样就会修改Cocos2d-x的引擎代码。


想到Unity中的做法,把NetworkClient继承自Node,这样就能继承Node的Update了。

但是加上之后,在AppDelegate中New NetworkClient并没有执行Update。


原因如下,虽然添加了scheduleUpdate(); 但是当前Node并没有进入。平时使用都是直接被add到父节点。现在单独把Node作为一个节点,就需要在New之后执行以下代码:

在初始化函数中添加:

		this->onEnter();
		this->onEnterTransitionDidFinish();
		scheduleUpdate();

终于成功。

附代码:

#include "AppController.h"
#include "LogoScene.h"

AppController::AppController()
{
}

bool AppController::init()
{
	if (Node::init())
	{
		this->onEnter();
		this->onEnterTransitionDidFinish();
		scheduleUpdate();

		// create a scene. it's an autorelease object
		//auto scene = HelloWorld::scene();
		auto scene=LogoScene::create();

		// run
		Director::getInstance()->runWithScene(scene);


		
		return true;
	}
	return false;
}

void AppController::update(float dt)
{
	//开始EventManager消息机制;
	int a=0;

	//开始网络通讯;
}

AppController::~AppController()
{

}


Cocos2d-x 网络线程与UI线程的同步 继承Node但是不执行Update