1. 程式人生 > >CocosCreator 中 JS 與 Java 互相調用方式和註意事項

CocosCreator 中 JS 與 Java 互相調用方式和註意事項

str number 參數類型 run AI 正是 多個 mail void

  • JS 調用 Java 方法
    在 CocosCreator 下 JS 調用 Java/Objective-C 的格式都是:
  • var o = jsb.reflection.callStaticMethod(className, methodName, methodSignature, parameters...)
    JS 只能調用 Java 中的靜態方法,需要傳入類名、方法名、方法簽名、方法參數,並且可以獲得返回值。

    類名
    類名必須是包含 Java 包路徑的完整類名,而且用斜線 / 代替點 . ,例如 com.johnny.test.WxApiHelper 應該傳入 com/johnny/test/WxApiHelper 。

    方法名
    方法名很簡單,就是方法本來的名字。

    方法簽名
    方法簽名有點復雜,最簡單的方法簽名是 ()V ,它表示一個沒有參數也沒有返回值的方法。括號裏的符號表示參數類型,括號後面的符號表示返回值類型。因為 Java 是允許函數重載的,可以有多個方法名相同但是參數返回值不同的方法,方法簽名正是用來幫助區分這些相同名字的方法的。

    目前 Cocos Creator 中支持的 Java 類型簽名有下面 4 種:

    Java 類型 簽名
    int I
    float F
    boolean Z
    String Ljava/lang/String;
    如果是其他類型的話,可以考慮轉換為 JSON 字符串。

    參數
    參數可以是 0 個或任意多個,直接使用 JS 中的 number,bool 和 string 就可以。

    註意,如果 JS 調用 Java 過程中,需要更新 UI 元素,更新的部分代碼需要運行在 UI 線程中 Activity.runOnUiThread(Runnable) ,因為 JS 調用 Java 的過程不是運行在 UI 線程中的。

    1. Java 調用 JS 函數
      有時候還需要在 Java 中回調 JS 函數,例如微信登錄成功後回調給 JS 函數,目前的方式是用 Cocos2dxJavascriptJavaBridge 的靜態方法 evalString() 。

    // cc.wxcb 是掛在 cc 的一個對象
    Cocos2dxJavascriptJavaBridge.evalString("cc.wxcb.onLoginResp(‘"+ authResp.token +"‘)");

    所傳參數只支持 JS 中的 number,bool 和 string。

    但是需要註意的是 Java 回調 JS 時,一定要運行在 GL 線程中:

    activity.runOnGLThread(new Runnable() {@Override
    br/>@Override
    Cocos2dxJavascriptJavaBridge.evalString("cc.wxcb.onLoginResp(‘"+ authResp.token +"‘)");
    }
    });

    CocosCreator 中 JS 與 Java 互相調用方式和註意事項