zoukankan      html  css  js  c++  java
  • 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++那部分可以自己完成

  • 相关阅读:
    团队二阶段冲刺个人工作总结9
    团队二阶段冲刺个人工作总结8
    团队二阶段冲刺个人工作总结7
    团队二阶段冲刺个人工作总结6
    PSP总结报告
    第十三周例行报告
    对团队成员公开感谢博客
    附加作业 软件工程原则的应用实例分析
    第十二周例行报告
    第十一周例行报告
  • 原文地址:https://www.cnblogs.com/howeho/p/3317339.html
Copyright © 2011-2022 走看看