cococos 2 dx-jsb言語間呼び出しおよびサードパーティ統合-プロセスレコード

4364 ワード

1:C++でjsメソッドを呼び出す:
問題:iosでは、ユーザーがホームキーでゲームをバックグラウンドに転送すると、jsの一時停止ゲーム方法を呼び出す.
AppDelegate::アプリケーションDidEnterBackground()およびアプリケーションDidEnterForeground()メソッドは、C++方式プロセッサがバックグラウンドおよびフロントに入るコードであり、ここでC++呼び出しjsのコードを追加する:
//version 2.1.3

ScriptingCore* sc = ScriptingCore::getInstance();

jsval nsval;

JS_GetProperty(sc->getGlobalContext(), sc->getGlobalObject(), "  ", &nsval);

if(nsval != JSVAL_VOID)

{

     sc->executeFunctionWithOwner(nsval,"   ");  

}


js(クラス名plus、メソッド名:onDidEnterBackgroundを仮定):
var plus = {};
plus.onDidEnterBackground(){...//code here};
コメント:
executeFunctionWithOwnerを使用する鍵はOwner,JS_を取得することです.GetPropertyはspideMonkeyが提供する属性(オブジェクト)を取得する方法である.
 
=========================================================
2:jsでC++メソッドを呼び出す:
C++メソッドを定義し、バインドを作成します.TableViewでtestjsメソッドを追加する例として、jsb_cocos2dx_extension_manual.cppにコードを追加するには:
//add manual function to js

static JSBool js_cocos2dx_CCTableView_testFuncTojs(JSContext* cx, uint32_t argc, jsval *vp)

{

    if(argc > 0)

    {

        JSString *string = NULL;

        JS_ConvertArguments(cx, argc, JS_ARGV(cx, vp), "S", &string);

        if(string)

        {

            JSStringWrapper wrapper(string);

            CCLOG("jsb binding say: %s",wrapper.get().c_str());

        }

    }

    return JS_TRUE;

}


  
 
そしてregister_all_cocos2dx_extenstion_manual(JSCoext*cx,JSObject*global)末尾行に定義を追加します.
 
JS_DefineFunction(cx, tmpObj, "testFuncTojs", js_cocos2dx_CCTableView_testFuncTojs, 1, JSPROP_READONLY|JSPROP_PERMANENT);

 
最後にjsファイルで呼び出すことができます.
 
cc.TableView.testFuncTojs("hello , jsb!");
 
 
=========================================================
3:C++呼び出しobj-C
ocを定義します.h和.mファイル、定義方法:testLogとtestMessageBox
c++を定義する.hファイル
c++のcppファイルを定義し、接尾辞名を.mm
.mmファイル混成の書き方は以下の通りである.
#include "supportOC.h"

#include "invokeOC.h"



void invokeOC::myinit(){

    [supportOC testLog];

    [supportOC testMessageBox:@"cocos2d-x  oc" title:@"hello"];

} 


  
その後、メインプログラムにc++を導入する.hファイル後にinvokeOC::myinit()メソッドを使用できます.
=========================================================
4:C++とJavaのやりとり
Androidバージョンを作成するには、jniによって実装されたjavaの関数をC++で呼び出す必要があります.インスタンス:
ヘッダーにファイルをインポートするには、次の手順に従います.
#include
#include "platform/android/jniHelper.h"
次に、C++メソッドを定義します.
void callJavaFunc()



{



  cocos2d::JniMethodInfo t;



  if(cocos2d::JniHelper::getStaticMethodInfo(t, "org/cocos2dx/    /  ", "java   ","()V"))



  {



    t.env->CallStaticVoidMethod(t.classID, t.methodID);



  }



}

c++でcallJavaFunc()メソッドを呼び出すかjs呼び出しにバインドし、NDKコンパイルを使用してADTで実行するとjavaのメソッドに移行します.
 
JAvaがC++を呼び出す方法:
まずjavaでpublic static native void funcname()を定義します.その後、実行時にC++の一定の命名規則のfuncname関数が呼び出されます.名前は次のとおりです.
extern "C" {



  void Java_org_cocos2dx_   _  _funcname(JNIEnv *env, jobject thiz)



  {



    CCLog("jni : java call C++ ");

  }



}

 
ここで必ずextern“C”を要して、さもなくばjavaはこのnative方法を見つけることができません;
=========================================================
4:2.1について.3 Plugin-X
しばらく実現する暇がなくて、2編の良い文を添付します:
http://go3k.org/blog/2013/07/08/cocos2dx-pluginx-1/
http://go3k.org/blog/2013/07/08/cocos2dx-pluginx-2/
=========================================================
5:参照:
2.1.0バージョン手動バインドTable Viewプロシージャ:https://github.com/cocos2d/cocos2d-x/pull/2015/files
C++ソースコードを調整する.
scripting/javascript/bindings/cocos2d_specifices.cppにバインドコードを追加する.
scripting/javascript/bindings/js/jsb_cocos2d.jsに定数と拡張クラスを追加する. 
tools/tojs/cocos2dx.iniスクリプト生成のルールを追加する.