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()
{

}
时间: 2024-10-27 13:40:15

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

新建线程与UI线程间的通信

现在用一个实例来演示一下自己的新建线程与UI线程间的通信. UI界面包含3个控件: 一个输入框,用来输入数字: 一个显示框,用来显示从2开始,到输入数字之间的所有质数: 一个按钮,点击后获取输入框输入的数字,交给新建线程处理,线程计算质数后把结果传给UI线程,UI线程显示结果到显示框. XML如下: 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android=&q

C# 委托 / 跨线程访问UI / 线程间操作无效: 从不是创建控件“Form1”的线程访问它

C# 委托 / 跨线程访问UI /  线程间操作无效: 从不是创建控件"Form1"的线程访问它 网上的代码都比较复杂,还是这个简单 见代码, 简易解决办法: 主窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; usi

Android中子线程和UI线程之间通信的方式

Android中子线程和UI线程之间通信的详细解释 1.在多线程编程这块,我们经常要使用Handler,Thread和Runnable这三个类,那么他们之间的关系你是否弄清楚了呢?下面详解一下. 2.首先在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行. 3.Handler: (1).概念: Handler是沟通Activity 与Thread/runnable的桥梁.而Handler是运行在主UI线程中的,它与子线程

Android ActivityThread(主线程或UI线程)简介

1. ActivityThread功能 它管理应用进程的主线程的执行(相当于普通Java程序的main入口函数),并根据AMS的要求(通过IApplicationThread接口,AMS为Client.ActivityThread.ApplicationThread为Server)负责调度和执行activities.broadcasts和其它操作. 在Android系统中,在默认情况下,一个应用程序内的各个组件(如Activity.BroadcastReceiver.Service)都会在同一个

qt 线程与ui线程同步

QT UI 与线程同步 目前只会一种,采用信号槽机制.通常情况下,信号和槽机制可以同步操作,这就意味着在发射信号的时候,使用直接函数即可以立刻调用连接到一个信号上的多个槽.然而,当连接位于不同线程中的对象时,这一机制就会变得不同步起来,可以通过修改QObject::connect()的第5个可选参数而改变.connect的第五个参数Qt::QueuedConnection表示槽函数由接受信号的线程所执行,如果不加表示槽函数由发出信号的次线程执行.当传递信号的参数类型不是QT的元类型时要先注册,关

如何更新UI才能不出异常呢?SDK告诉我们,有以下4种方式可以从其它线程访问UI线程

Activity.runOnUiThread(Runnable) ·      View.post(Runnable) ·      View.postDelayed(Runnable, long) ·      Handler

非UI线程和UI线程通信

public void onClick(View v) { new Thread(new Runnable() { public void run() { final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png"); mImageView.post(new Runnable() { public void run() { mImageView.setImageBitmap(bitmap); } }

Android UI线程和非UI线程

UI线程及Android的单线程模型原则 当应用启动,系统会创建一个主线程(main thread). 这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,你的应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages))发生交互. 所以main thread也叫UI thread也即UI线程. 系统不会为

在UI线程之外,多线程处理Bitmaps

多线程处理Bitmaps 上一篇,我们讨论了:Android有效的处理Bitmap,降低内存 ,可是最好不要运行在主线程(UI线程),假设图片是本地的或者网络的又或者是其它地方的. 图片载入的时间和很多因素有关(比方从网络或本地读取速度,图片的大小.CPU的能力),假设这些任务堵塞了UI线程,系统有可能会回收并关闭它(see Designing for Responsiveness for more information). 这篇我们将讨论怎样在UI线程之外后台使用异步任务(AsyncTask