91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

【Cocos2d-x】開發Recipe之【JNI】

發布時間:2020-05-26 12:29:27 來源:網絡 閱讀:672 作者:zllivedoor 欄目:游戲開發

首先在Classes文件夾下新建C++文件

InterfaceJNI.cpp

InterfaceJNI.h

【Cocos2d-x】開發Recipe之【JNI】




InterfaceJNI.h
#include <string.h>
#include "cocos2d.h"
                                                                                                                                                                                                                                                                                            
using namespace std;
using namespace cocos2d;
                                                                                                                                                                                                                                                                                            
class InterfaceJNI
{
public:
    static void func1();
};




InterfaceJNI.cpp
#include "InterfaceJNI.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
                                                                                                                                                                                                                                                                                     
// Android那邊的文件的包
#define  CLASS_NAME "com/china/jniTest/jniTest"
                                                                                                                                                                                                                                                                                     
void InterfaceJNI::func1()
{
    JniMethodInfo t;
    // Class名和方法名的指定。func1是在Android代碼那邊定義的方法名。
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func1", "()V")) {
        // 由于是void、所以使用CallStaticVoidMethod方法。
        t.env->CallStaticVoidMethod(t.classID, t.methodID);
        // 釋放
        t.env->DeleteLocalRef(t.classID);
    }
}
InterfaceJNI.cpp
#include "InterfaceJNI.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
// Android那邊的文件的包
#define  CLASS_NAME "com/china/jniTest/jniTest"
voidInterfaceJNI::func1()
{
JniMethodInfo t;
// Class名和方法名的指定。func1是在Android代碼那邊定義的方法名。
if(JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func1", "()V")) {
// 由于是void、所以使用CallStaticVoidMethod方法。
t.env->CallStaticVoidMethod(t.classID, t.methodID);
// 釋放
t.env->DeleteLocalRef(t.classID);
}
}


下面在Cocos2dx中調用剛才定義好的JNI方法吧。

HelloWorldScene.cpp中調用吧。


HelloWorldScene.cpp
#include "HelloWorldScene.h"
                                                                                                                                          
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "JNICalls/InterfaceJNI.h"
#endif
                                                                                                                                          
USING_NS_CC;
                                                                                                                                          
bool HelloWorld::init()
{
    //////////////////////////////
    // 1. super init first
    if ( !CCLayer::init() )
    {
        return false;
    }
                                                                                                                                          
    this->jniLoad();
                                                                                                                                          
}
                                                                                                                                          
void HelloWorld::jniLoad()
{   
// 記得要加上ANDROID的判定。
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
    InterfaceJNI::func1();
#endif
}


這樣一來Cocos2dx方的方法都定義好了。

接下來該做Android的方法了。

jniTest.java
package com.marnishi.jniTest;
                                                                                                                 
import org.cocos2dx.lib.Cocos2dxActivity;
                                                                                                                 
import android.os.Bundle;
                                                                                                                 
public class jniTest extends Cocos2dxActivity{
                                                                                                                 
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
    }
                                                                                                                     
    public static void func1() {
        System.out.println("func1 call");
    }
                                                                                                                 
    static {
         System.loadLibrary("game");
    }
                                                                                                                 
}

------------------------------------------------------------

----------------------華麗的分割線--------------------------

------------------------------------------------------------

上面只做了個無返回值,無參數的例子。

下面整幾個有返回值,有參數的例子吧。

cocos2d-x
InterfaceJNI.h
#include <string.h>
#include "cocos2d.h"
                                                                                  
using namespace std;
using namespace cocos2d;
                                                                                  
class InterfaceJNI
{
public:
    static void func1();
    static void func2(int value);
    static void func3(bool value);
    static void func4(const char *value);
    static void func5(const char *value1, int value2, bool value3);
    static int func6();
    static std::string func7();
};



InterfaceJNI.cpp
#include "InterfaceJNI.h"
#include "platform/android/jni/JniHelper.h"
#include <jni.h>
#include <android/log.h>
                       
// Android的Package名和java Class名
#define  CLASS_NAME "com/china/jniTest/jniTest"
                       
void InterfaceJNI::func1()
{
    JniMethodInfo t;
    // Class名和方法名的指定。
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func1", "()V")) {
        // 因為是void、所以用CallStaticVoidMethod
        t.env->CallStaticVoidMethod(t.classID, t.methodID);
        // 釋放
        t.env->DeleteLocalRef(t.classID);
    }
}
                       
/*
// Android代碼這樣寫即可
public static void func1() {
    System.out.println("func1 call");
}
*/
                       
void InterfaceJNI::func2(int value)
{
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func2", "(I)V")) {
        t.env->CallStaticVoidMethod(t.classID, t.methodID, value);
        t.env->DeleteLocalRef(t.classID);
    }
}
                       
/*
public static void func2(int value) {
    System.out.println("func2 val=" + value);
}
*/
                       
void InterfaceJNI::func3(bool value)
{
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func3", "(Z)V")) {
        t.env->CallStaticVoidMethod(t.classID, t.methodID, value);
        t.env->DeleteLocalRef(t.classID);
    }
}
/*
public static void func3(boolean value) {
    System.out.println("func3 val=" + value);
}
*/
                       
void InterfaceJNI::func4(const char *value)
{
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func4", "(Ljava/lang/String;)V")) {
                             
        jstring stringArg1 = t.env->NewStringUTF(value);
        t.env->CallStaticVoidMethod(t.classID, t.methodID, stringArg1);
                               
        t.env->DeleteLocalRef(stringArg1);
        t.env->DeleteLocalRef(t.classID);
    }
}
/*
public static void func4(String value) {
    System.out.println("func4 val=" + value);
}
*/
                       
void InterfaceJNI::func5(const char *value1, int value2, bool value3)
{
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func5", "(Ljava/lang/String;IZ)V")) {
        jstring stringArg1 = t.env->NewStringUTF(value1);
        t.env->CallStaticVoidMethod(t.classID, t.methodID, stringArg1, value2, value3);
                               
        t.env->DeleteLocalRef(stringArg1);
        t.env->DeleteLocalRef(t.classID);
    }
}
                       
/*
public static void func5(String value1, int value2, boolean value3) {
    System.out.println("func5 val=" + value1 + " int=" + value2 + " bool=" + value3);
}
*/
                       
int InterfaceJNI::func6()
{
    int ret = 0;
                           
    JniMethodInfo t;
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func6", "()I")) {
        ret = t.env->CallStaticIntMethod(t.classID, t.methodID);
        t.env->DeleteLocalRef(t.classID);
    }
                           
    return ret;
}
                       
/*
public static int func6() {
    return 12345;
}
*/
                       
std::string InterfaceJNI::func7()
{
    std::string ret;
    JniMethodInfo t;
                           
    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "func7", "()Ljava/lang/String;")) {
        jstring jStr = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID);
        const char* str = t.env->GetStringUTFChars(jStr, NULL);
        ret = str;
                       
        t.env->ReleaseStringUTFChars(jStr,str);
        t.env->DeleteLocalRef(t.classID);
    }
                           
    return ret;
                           
}
                       
/*
public static String func7() {
    return "禁止擼管";
}
*/
完事兒
【Cocos2d-x】開發Recipe之【JNI】

													            
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

武隆县| 嵊泗县| 北海市| 郯城县| 名山县| 叙永县| 竹溪县| 砚山县| 珠海市| 莲花县| 宜兴市| 商城县| 上蔡县| 马尔康县| 绥中县| 清丰县| 根河市| 喀喇沁旗| 突泉县| 辽中县| 乐清市| 霞浦县| 新宁县| 峡江县| 石门县| 元氏县| 贞丰县| 梁山县| 鄂托克旗| 阳曲县| 浏阳市| 新建县| 临颍县| 景泰县| 静宁县| 尉氏县| 昭苏县| 龙岩市| 东方市| 芮城县| 镇坪县|