此為以前寫給同事看的簡單教學文
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");
}
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++底下的不同
沒有留言 :
張貼留言