2012/08/10

以cocos2d-x為例看JNI java call c

此為以前寫給同事看的簡單教學文

Java
看到Cocos2dxRenderer.java
宣告要使用的Native方法, 前面加"native"修飾字,   如下
    private static native void nativeTouchesBegin(int id, float x, float y);
    private static native void nativeTouchesEnd(int id, float x, float y);
    private static native void nativeTouchesMove(int[] id, float[] x, float[] y);
    private static native void nativeTouchesCancel(int[] id, float[] x, float[] y);
    private static native boolean nativeKeyDown(int keyCode);
    private static native void nativeRender();
    private static native void nativeInit(int w, int h);
    private static native void nativeOnPause();
    private static native void nativeOnResume();

另外需要載入要用的程式庫
可看到 HelloWorld\android\src\org\cocos2dx\application\ApplicationDemo.java的最下面
static {
         System.loadLibrary("cocosdenshion");
         System.loadLibrary("helloworld");
}

Native
看到tests\test.android\jni\tests\main.cpp
void Java_org_cocos2dx_lib_Cocos2dxRenderer_nativeInit(JNIEnv*  env, jobject thiz, jint w, jint h)   對應到上面的  private static native void nativeInit(int w, int h);
咖啡色是前綴字
藍色的是package
綠色的是 class
橙色是方法名稱

可以看到多了兩個參數  JNIEnv*  env,  jobject thiz   這兩個是固定要加的, 後兩個就跟java那邊差不多, 只是int變成jint
其它的都散布在
D:\cocos2d-1.0.1-x-0.12.0\cocos2dx\platform\android\jni中的
IMEJni.cpp, MessageJni.cpp, TouchesJni.cpp
用"Java_org_cocos2dx_lib"搜尋應該就看的到
另外需要注意一下使用時C跟C++底下的不同

沒有留言 :