Cocos2d-x java 通过jni调用c++的方法

前面博客说到,cocos2d-x c++界面层运行在一个GLThread线程里面,严格的说是运行在Cocos2dxGLSurfaceView(继承自GLSurfaceView

里面。opengl的渲染,刷新都是有这个类来完成。 所以我们不能直接在java方法里调用c++方法来刷新界面,唯一的方法就是绕开javaUI主线程,让GLSurfaceView来做这件工作。

ok,前面说到 Cocos2dxGLSurfaceView 类,它是cocos2d-x引擎的一部分,直接修改该类太粗暴。所以以下新建一个Class 

TimerJavaToC.java 以下只写核心方法

import org.cocos2dx.lib.Cocos2dxActivity;



import org.cocos2dx.lib.Cocos2dxGLSurfaceView;



public class TimerJavaToC 



{



 //定义native方法 

    private static native void javaCallC();



  private Cocos2dxGLSurfaceView mGLSurfaceView = null;



public TimerJavaToC(Cocos2dxActivity act)

{



mGLSurfaceView = Cocos2dxGLSurfaceView.getInstance();

init();



}
public void callCPP()
{
  
          //这里使用
Cocos2dxGLSurfaceView的queueEvent方法,把这个方法加到Cocos2dxGLSurfaceView的事件队列中,保证run运行的方法是在Cocos2dxGLSurfaceView线程中调用 .具体用法还可以参见引擎的Cocos2dxGLSurfaceView.java类
 

                mGLSurfaceView.queueEvent( new Runnable()

 
   

                {

 
   

                @Override

 
   

                public void run() 

 
   

                {

 
   

                //调用jni \

               TimerJavaToC.javaCallC();

 
   

                }

 
   

                });

}



}

 

好了,核心部分就这么点,c++那部分可以自己完成

 

你可能感兴趣的:(cocos2d-x)