|
|
(同じ利用者による、間の7版が非表示) |
行1: |
行1: |
− | ==サンプルコード==
| + | [[Cocos2dx/AndroidNative連携/メソッド呼出]] |
− | -Classes/NativeLauncher.h
| + | |
− | #ifndef Helloworld_NativeLauncher_h
| + | |
− | #define Helloworld_NativeLauncher_h
| + | |
− | class NativeLauncher
| + | |
− | {
| + | |
− | public:
| + | |
− | static void launchNative();
| + | |
− | };
| + | |
− | #endif
| + | |
| | | |
− | -Classes/NativeLauncher.cpp
| + | [[Cocos2dx/AndroidNative連携/引数&戻り値あり]] |
− | #include "NativeLauncher.h"
| + | |
− | #include <jni.h>
| + | |
− | #include "platform/android/jni/JniHelper.h"
| + | |
− | #define CLASS_NAME "org/cocos2dx/cpp/AppActivity"
| + | |
− | void NativeLauncher::launchNative()
| + | |
− | {
| + | |
− | cocos2d::JniMethodInfo t;
| + | |
− | if (cocos2d::JniHelper::getStaticMethodInfo(t, CLASS_NAME, "launchNative", "()V")) {
| + | |
− | t.env->CallStaticVoidMethod(t.classID, t.methodID);
| + | |
− | t.env->DeleteLocalRef(t.classID);
| + | |
− | }
| + | |
− | }
| + | |
| | | |
− | -Classes/HelloWorldScene.h
| + | [[Cocos2dx/AndroidNative連携/jni型]] |
− | void menuLogCallback(cocos2d::Ref* pSender);
| + | |
| | | |
− | -Classes/HelloWorldScene.cpp
| + | [[Cocos2dx/AndroidNative連携/コールバック]] |
− | #include "NativeLauncher.h"
| + | |
− | bool HelloWorld::init()
| + | |
− | {
| + | |
− | // 略
| + | |
− | auto logItem = MenuItemImage::create(
| + | |
− | "CloseNormal.png",
| + | |
− | "CloseSelected.png",
| + | |
− | CC_CALLBACK_1(HelloWorld::menuLogCallback, this));
| + | |
− | logItem->setPosition(Vec2(origin.x + visibleSize.width - logItem->getContentSize().width/2 ,
| + | |
− | origin.y + visibleSize.height - logItem->getContentSize().height/2));
| + | |
− | auto logmenu = Menu::create(logItem, NULL);
| + | |
− | logmenu->setPosition(Vec2::ZERO);
| + | |
− | this->addChild(logmenu, 1);
| + | |
− | // 略
| + | |
− | }
| + | |
− | void HelloWorld::menuLogCallback(Ref* pSender)
| + | |
− | {
| + | |
− | NativeLauncher::launchNative();
| + | |
− | }
| + | |
| | | |
− | -proj.android-studio/app/src/org/cocos2dx/cpp/AppActivity.java
| + | [[Cocos2dx/AndroidNative連携/コールバック配列]] |
− | public class AppActivity extends Cocos2dxActivity {
| + | |
− | public static void launchNative()
| + | |
− | {
| + | |
− | System.out.println("launchNative()");
| + | |
− | }
| + | |
− | }
| + | |
− | | + | |
− | -proj.android/jni/Android.mk
| + | |
− | LOCAL_SRC_FILES := hellocpp/main.cpp \
| + | |
− | ../../Classes/AppDelegate.cpp \
| + | |
− | ../../Classes/HelloWorldScene.cpp \
| + | |
− | ../../Classes/NativeLauncher.cpp
| + | |
− | NativeLauncher.cppを追加
| + | |
− | | + | |
− | -proj.android-studio/jni/Android.mk
| + | |
− | LOCAL_SRC_FILES := hellocpp/main.cpp \
| + | |
− | ../../Classes/AppDelegate.cpp \
| + | |
− | ../../Classes/HelloWorldScene.cpp \
| + | |
− | ../../Classes/NativeLauncher.cpp
| + | |
− | NativeLauncher.cppを追加
| + | |
− | | + | |
− | | + | |
− | ==E/JniHelper: Failed to find static method id ofエラーが出る場合==
| + | |
− | *引数がintの場合は"()V"の部分を"(I)V"に書き換えてあげる
| + | |
− | *引数がintで戻りもintの場合は"()V"の部分を"(I)I"に書き換えてあげる
| + | |
− | *引数が2つあり両方intの場合は"()V"の部分を"(II)I"に書き換えてあげる
| + | |
− | 参考:http://qiita.com/isaoeka/items/9cabb349cd18319fd239
| + | |
− | | + | |
− | *文字列が引数の場合は"()V"の部分に;があるか確認する
| + | |
− | if(JniHelper::getStaticMethodInfo(t, CLASS_NAME, "function_name", "( Ljava/lang/String; Ljava/lang/String;)V")
| + | |
− | 参考:http://r2274.blog9.fc2.com/blog-entry-1658.html
| + | |
− | | + | |
− | ==参考==
| + | |
− | https://rakuishi.com/archives/5817/
| + | |