手游中android平台在java代码里--->游戏子线程和java主线程的交替运行

本文详细介绍了Cocos2d-x中如何实现跨线程操作以刷新界面及更新UI,包括通过GLSurfaceView进行界面刷新的具体实现方式,并提供了从子线程更新主线程UI的两种常见方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView)里面,Cocos2dxGLSurfaceView 类,它是cocos2d-x引擎的一部分。opengl的渲染和刷新都是由这个类来完成。 我们不能直接在主线程java方法里调用c++方法来刷新界面,唯一的方法就是绕开javaUI主线程,而这绕开主线程的工作让GLSurfaceView来完成。代码如下(在java代码里):

private static native void javaCallC();

private Cocos2dxGLSurfaceView mGLSurfaceView = null;

public TimerJavaToC(Cocos2dxActivity act)
{

	mGLSurfaceView = Cocos2dxGLSurfaceView.getInstance();
	init();

}

public void callCPP()
{
		mGLSurfaceView.queueEvent( new Runnable()
             {
              	@Override
               	public void run() 
                	{
               		 //调用jni,到c++
               		TimerJavaToC.javaCallC();
              	}
               });
}

2、更新UI(更新数据)的两种方法是handler和runUiOnThread,更新UI必须得在主线程,否则会报错。抛出异常:android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.  


3、游戏里从子线程到主线程也用runUiOnThread.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值