Cocos2d-x

Quick Start

ไธ‹่ฝฝๆœ€ๆ–ฐ็‰ˆๆœฌ

ๅœจๅŽŸ้กน็›ฎๅบ”็”จNavergame SDK

ๆœฌๆŒ‡ๅ—ไปฅCocos2d-x 3.17.2็‰ˆๆœฌไธบๆ ‡ๅ‡†็ผ–ๅ†™่€Œๆˆใ€‚

1. ๆ’ไปถๆž„ๆˆ

  • ็คบไพ‹้กน็›ฎๅ†…็š„Pluginsๆ–‡ไปถๅคนๅซๆœ‰SDKๆ‰€้œ€ๆ–‡ไปถใ€‚

  1. android๏ผšๅซๆœ‰android buildๆ‰€้œ€ๆ–‡ไปถใ€‚

  2. ios๏ผšๅซๆœ‰ios buildๆ‰€้œ€ๆ–‡ไปถใ€‚

  3. navergamesdk๏ผšๅซๆœ‰cocos2d-x้กน็›ฎๅ’Œandroidใ€ios็ญ‰่ฟžๆŽฅๅ„ๅนณๅฐๆ‰€้œ€ๆ–‡ไปถใ€‚

2. ๅฎ‰่ฃ…ๆ’ไปถ

  • ไธบไบ†ๅ…ณ่”่ดตๅ…ฌๅธ็š„Cocos2d-x้กน็›ฎๅ’ŒSDK๏ผŒ้œ€่ฆๆŒ‰ๅฆ‚ไธ‹ๆ–นๆณ•ๅฐ†Pluginsๅ†…็š„navergamesdkๆ–‡ไปถๅคนๅคๅˆถๅˆฐ่ดตๅ…ฌๅธ้กน็›ฎๅ†…็š„Classesๆ–‡ไปถๅคนๅ†…ใ€‚

  • ๅฆ‚ๆžœ่ดตๅ…ฌๅธ้กน็›ฎๅช่ฎกๅˆ’ๆŽจๅ‡บAndroidๆˆ–iOSๅ…ถไธญไธ€ไธชๅนณๅฐ๏ผŒ้‚ฃไนˆๅช้œ€ไฟ็•™platformไธ‹ๆ–น็š„Androidๆˆ–iOSๆ–‡ไปถๅคนไธญ็›ธๅ…ณๆ–‡ไปถๅคน๏ผŒๅˆ ้™คๅ…ถไป–ๆ–‡ไปถๅคนๅณๅฏใ€‚

2-1. NaverGameSDK.h

  • ็›ธๅบ”ๆ–‡ไปถๅ†…็ผ–ๅ†™ๆœ‰่ฟžๆŽฅSDKๆ‰€้œ€ไปฃ็ ใ€‚

3. ๅบ”็”จๆ’ไปถ

ๅœจ่ดตๅ…ฌๅธ็š„้กน็›ฎๅ†…่ฆไฝฟ็”จSDK็š„ไฝ็ฝฎincludeๅคดๆ–‡ไปถใ€‚๏ผˆๅœจ็คบไพ‹้กน็›ฎๅบ”็”จไบŽHelloWorldScene.h๏ผ‰

#include "NaverGameSDK.h"
  • ๅฆ‚ๆžœๆœชๆ‰พๅˆฐNaverGameSDK.h๏ผŒๅบ”ๅฆ‚ไธ‹ๅ›พๆ‰€็คบๅœจrootProject/CmakeLists.txtๆทปๅŠ ๅคดๆ–‡ไปถใ€‚

็™ป่ฎฐๅคดๆ–‡ไปถๅ’Œcppๆ–‡ไปถใ€‚
็™ป่ฎฐnavergamesdkๆ–‡ไปถๅคนใ€‚

3-1. SDKๅˆๅง‹ๅŒ–

ๅฏนSDK่ฟ›่กŒๅˆๅง‹ๅŒ–ๆ—ถ๏ผŒๅฆ‚ไธ‹ๆ‰€็คบ่ฎพ็ฝฎๅˆๅง‹ๅŒ–้€‰้กน๏ผŒ่ฐƒ็”จinit() method๏ผš

nng::NaverGameSDK::init("UKvNABLDsyEJusJGsXL2", "rK4suc_Qd0", "naver_game_4developer");

3-2. SDKไบ‹ไปถ็›‘ๅฌๅ™จ็™ป่ฎฐ

็™ป่ฎฐ็›‘ๅฌๅ™จๅŽๆ–นๅฏๆŽฅๆ”ถSDKๅ‘้€็š„ๅ„็งไบ‹ไปถใ€‚

//๋ฆฌ์Šค๋„ˆ๋Š” NaverGameSDK.h ์— ์„ ์–ธ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
nng::NaverGameSDK::setSdkListener(this);

3-3. ๆŸฅ็œ‹SDKๆ”ฏๆŒ็š„Funtion

  1. ๅฏผๅ…ฅไธป้กตๆจชๅน…

    nng::NaverGameSDK::startHomeBanner();
  2. ๅฏผๅ…ฅ็ปดๆŠคๆจชๅน…

    nng::NaverGameSDK::startSorryBanner();
  3. ๅฏผๅ…ฅ็‰นๅฎšๅ…ฌๅ‘Šๆ 

    nng::NaverGameSDK::startBoard(boardId);
  4. ๅฏผๅ…ฅ็‰นๅฎš็•™่จ€

    ้€š่ฟ‡็™ป่ฎฐ็•™่จ€็š„็ผ–ๅท็›ดๆŽฅ่ฟ่กŒ็š„ๆ–นๆณ•ใ€‚ๅฆ‚ๆžœๆ˜ฏ้€š่ฟ‡้ข„็บฆๆ˜พ็คบ็™ป่ฎฐ็š„้ข„็บฆ็•™่จ€๏ผŒๅบ”ๅœจFeedId่พ“ๅ…ฅ้ข„็•™่จ€็š„็ผ–ๅท๏ผŒๅนถๅฐ†IsTempFeedId่พ“ๅ…ฅไธบTrueใ€‚

    nng::NaverGameSDK::startFeed(feedId, isTempFeedId);
  5. ็ปˆๆญขSDK

    nng::NaverGameSDK::stopSdk
  6. ๅฏผๅ…ฅๅ›ฝๅฎถไปฃ็ 

    ่Žทๅ–็งปๅŠจ่ฎพๅค‡็š„countryCodeใ€‚ๅบ”ๅœจ่ฐƒ็”จinit() methodๅŽ่ฐƒ็”จ๏ผŒๆ–นๅฏ่Žทๅ–ๆญฃๅธธๅ€ผใ€‚

    nng::NaverGameSDK::getCountryCode();

    countryCodeๆ˜ฏ็”ฑ2ไธชๅญ—ๆฏๆž„ๆˆ็š„ๅ›ฝๅฎถไปฃ็ ๏ผˆISO 3166-1 alpha-2๏ผ‰ใ€‚ๅˆฉ็”จ่ฟ™ไธ€ไปฃ็ ๅฏๅœจไปฃ็ ๅ†…ๆŒ‰ๅ›ฝๅฎถ่ฟ›่กŒๅˆ†ๆ”ฏๅค„็†ใ€‚ไธป่ฆๅ›ฝๅฎถไปฃ็ ๅฆ‚ไธ‹ๆ‰€็คบ๏ผŒๅ…ถไป–ๅ›ฝๅฎถไปฃ็ ่ฏทๅ‚่€ƒ้“พๆŽฅใ€‚

    ๅ›ฝๅฎถไปฃ็ 

    ๅ›ฝๅฎถ

    CN

    ไธญๅ›ฝ

    JP

    ๆ—ฅๆœฌ

    KR

    ้Ÿฉๅ›ฝ

    TH

    ๆณฐๅ›ฝ

    US

    ็พŽๅ›ฝ

ๅฎ‰ๅ“้กน็›ฎๅบ”็”จNavergame SDK

ไธ‹้ขๆ˜ฏ็คบไพ‹้กน็›ฎ็š„ๅฎ‰ๅ“ๅˆ›ๅปบ็Žฏๅขƒ๏ผŒๆ•ฌ่ฏทๅ‚่€ƒใ€‚

  • Cocos2d-x 3.17.2

  • Android Studio 4.2

  • Gradle 4.9 (proj.android/gradle/wrapper/gradle-wrapper.properties)

  • Ndk 16.1.4479499

  • Cmake 3.10.2.4988404 (with Ninja 1.10.2)

1. ๆทปๅŠ ๅ…ณ่”Cocos2d-xๅ’ŒAndroid็š„ๆกฅๆŽฅๆ–‡ไปถ๏ผˆไปฃ็ ๏ผ‰

็คบไพ‹้กน็›ฎๅ†…็š„Pluginsๆ–‡ไปถๅคนใ€‚

Pluginsๆ–‡ไปถๅคนๅ†…็š„Androidๆ–‡ไปถๅคนๅ†…ๅฎนใ€‚

  1. com...ๆ–‡ไปถๅคนๅ†…ๆœ€ๅŽๅซๆœ‰ๅœจAndroidๅ‘ๆŒฅๆกฅๆŽฅcocos้กน็›ฎไฝœ็”จ็š„NNGSdk.javaๆ–‡ไปถใ€‚

  2. navergame-sdk-gradle-x.x.x.aarๆ˜ฏNavergame sdkๅบ“ใ€‚

็คบไพ‹้กน็›ฎ็›ฎๅฝ•็ป“ๆž„ใ€‚

1-1. navergame-sdk-gradle-x.x.x.aar

NaverๆธธๆˆSDKๅบ“ใ€‚

  • ็ฒ˜่ดด่‡ณrootProject/proj.android/app/libsๆ–‡ไปถๅคนใ€‚ๅฆ‚ๆžœๆฒกๆœ‰libsๆ–‡ไปถๅคน๏ผŒ่ฏทๅˆ›ๅปบใ€‚

1-2. NNGSdk.java

ๅœจAndroid็ผ–ๅ†™่ฟžๆŽฅCocos2d-x้กน็›ฎๅ’ŒSDK็š„ๆกฅๆŽฅไปฃ็ ็š„ๆ–‡ไปถใ€‚

  • ็ฒ˜่ดด่‡ณrootProject/proj.android/app/srcๆ–‡ไปถๅคนใ€‚่ฏท็ฒ˜่ดดไปฅcom..ๅผ€ๅง‹็š„ๆ‰€ๆœ‰ๆ–‡ไปถๅคนใ€‚

1-3. NaverGameSDK.cpp

็ผ–ๅ†™ๅœจCocos2d-x่ฟžๆŽฅAndroid้กน็›ฎ็š„ๆกฅๆŽฅไปฃ็ ็š„ๆ–‡ไปถๅคนใ€‚

  • ็กฎ่ฎคๆ˜ฏๅฆๆœ‰rootProject/Classes/navergamesdk/platform/android/NaverGameSDK.cppๆ–‡ไปถ๏ผŒๅฆ‚ๆžœๆฒกๆœ‰๏ผŒ่ฏทๅœจPluginsๆ–‡ไปถๅคนๅ†…ๆ‰พๅˆฐๅŽ็ฒ˜่ดดใ€‚

  • cocos2d-x็‰ˆๆœฌไธๅŒ๏ผŒJniHelper็š„ๅ็งฐๅฏ่ƒฝๆœ‰ๆ‰€ไธๅŒ๏ผŒ่ฏทๆ นๆฎ็‰ˆๆœฌ่ฟ›่กŒ็กฎ่ฎคใ€‚

#include "NaverGameSDK.h"
#include "platform/android/jni/JniHelper.h"

using namespace cocos2d;

namespace nng {
    static bool getStaticMethod(JniMethodInfo &methodinfo, const char *methodName, const char *paramCode) {
        static const char* kCafeSdkClass = "com/navercorp/nng/cocos2dx/sample/NNGSdk";
        return JniHelper::getStaticMethodInfo(methodinfo, kCafeSdkClass, methodName, paramCode);
    }

    static NaverGameSDKListener* sdkListener = nullptr;

    void NaverGameSDK::setSdkListener(NaverGameSDKListener* listener) {
        sdkListener = listener;
    }

    void NaverGameSDK::init(std::string clientId, std::string clientSecret, std::string loungeId) {
        JniMethodInfo t;
        if (getStaticMethod(t, "init","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V")) {
            jstring _clientId = t.env->NewStringUTF(clientId.c_str());
            jstring _clientSecret = t.env->NewStringUTF(clientSecret.c_str());
            jstring _loungeId = t.env->NewStringUTF(loungeId.c_str());

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

            t.env->DeleteLocalRef(_clientId);
            t.env->DeleteLocalRef(_clientSecret);
            t.env->DeleteLocalRef(_loungeId);
            t.env->DeleteLocalRef(t.classID);
        }
    }

    .
    .
    .

    extern "C" {
        JNIEXPORT void JNICALL
        Java_com_navercorp_nng_cocos2dx_sample_NNGSdk_onSdkStarted(JNIEnv* env, jclass thiz) {
            if (sdkListener == nullptr) return;
            sdkListener->onSdkStarted();
        }

        .
        .
        .
    }
}   /* namespace nng */
  • kCafeSdkClass = "com/navercorp/nng/cocos2dx/sample/NNGSdk";

    • NNGSdk.javaๆ–‡ไปถ็š„ไฝ็ฝฎ่ทฏๅพ„ใ€‚ๅฆ‚ๆžœๆ›ดๆ”นNNGSdk.java็š„ไฝ็ฝฎ่ทฏๅพ„๏ผŒ่ฏทๆ นๆฎ็›ธๅบ”ไฝ็ฝฎ่ฟ›่กŒไฟฎๆ”นใ€‚

  • Java_com_navercorp_nng_cocos2dx_sample_NNGSdk_Funtion๋„ค์ž„

    • NNGSDK.javaๆ–‡ไปถ็š„ไฝ็ฝฎ่ทฏๅพ„ใ€‚ๅฆ‚ๆžœๆ›ดๆ”นNNGSdk.java็š„ไฝ็ฝฎ่ทฏๅพ„๏ผŒ่ฏทๆ นๆฎ็›ธๅบ”ไฝ็ฝฎ่ฟ›่กŒไฟฎๆ”นใ€‚

2. ๆ—จๅœจ็”จๅฎ‰ๅ“ๅˆ›ๅปบ็š„่ฎพ็ฝฎ

1-1. AndroidManifest.xml

  • ๅœจrootProject/proj.android/app/AndroidManifest.xmlๆ–‡ไปถๅ†…ๆทปๅŠ SDKๆ‰€้œ€ๆƒ้™ใ€‚

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

1-2. build.gradle

  • ๅœจrootProject/proj.android/app/build.gradleๆ–‡ไปถๅ†…ๆทปๅŠ SDKๅ’ŒSDKๆ‰€้œ€ๅบ“ใ€‚

dependencies {
    implementation project(':libcocos2dx')
    /**
     * Navergame sdk์™€ ํ•„์š”ํ•œ libraries
     */
    implementation files('libs/navergame-sdk-gradle-1.1.0.aar')
    implementation "org.jetbrains.kotlin:kotlin-stdlib:1.3.72"            // Kotlin
    implementation "androidx.viewpager2:viewpager2:1.0.0"
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
    implementation "com.github.bumptech.glide:glide:3.7.0"                // Glide
    implementation "com.squareup.retrofit2:retrofit:2.6.4"                // Retrofit, Gson
    implementation "com.squareup.retrofit2:converter-gson:2.6.4"          // Retrofit, Gson
}

1-3. ndkๅŠcmake่ฎพ็ฝฎ

  • Android Studioไฝฟ็”จๆ–นๆณ•

    • ๅœจAndroid Studio -> Preferences -> ๆœ็ดข่ฟ›่กŒsdkๆœ็ดขๅŽ๏ผŒๅœจsdk toolsๆ ‡็ญพไธ‹่ฝฝndkๅ’Œcmakeใ€‚๏ผˆ่ฏทๆฃ€ๆŸฅShow Package Detailsใ€‚๏ผ‰

ไปฅcocos-3.17.2็‰ˆๆœฌไธบๅ‡†๏ผŒไฝฟ็”จndk-16.1.4479499ใ€cmake-3.10.2.4988404็‰ˆๆœฌใ€‚

1-4. ๅบ”็”จndkใ€cmake

  • ๅฏนrootProject/proj.android/local.propertiesๆ–‡ไปถ่พ“ๅ…ฅndkใ€cmakeๅฎ‰่ฃ…ๆ–‡ไปถ่ทฏๅพ„ใ€‚

3. ็”จๅฎ‰ๅ“ๅˆ›ๅปบ

Cocos2d-x้กน็›ฎๅฎ‰ๅ“ๅˆ›ๅปบๆ–นๆณ•ๅ…ฑ2็งใ€‚

  • cmake

  • ndk

ๆญฃ็กฎ็š„ๅ‘ฝๅๆ นๆฎcocos2d-x็‰ˆๆœฌๅฏ่ƒฝๆœ‰ๆ‰€ไธๅŒ๏ผŒ่ฏท็กฎ่ฎคใ€‚ไปฅ3.17.2็‰ˆๆœฌไธบๅ‡†๏ผŒๅฏๅœจbuild.gradleๆ–‡ไปถๅ†…็กฎ่ฎคใ€‚

ไปฅ3.17.2็‰ˆๆœฌไธบๅ‡†๏ผŒๆ˜ฏโ€œndk-buildโ€ๅ’Œโ€œcmakeโ€ใ€‚

3-0. ๅˆ›ๅปบ็ฑปๅž‹ๅบ”็”จๆ–นๆณ•

ๅฏๅœจrootProject/proj.android/gradle.propertiesๆ–‡ไปถๅ†…็š„PROP_BUILD_TYPEproperty็กฎๅฎšใ€‚

  • ๅฆ‚ๆžœ่ฆ็”จcmake่ฟ›่กŒๅˆ›ๅปบ๏ผŒๅฏ่ฎพ็ฝฎPROP_BUILD_TYPE=cmakeใ€‚

3-1. ็”จCMAKEๅˆ›ๅปบ

  • ๅœจrootProject/proj.android/gradle.propertiesๅ†…็กฎ่ฎคPROP_BUILD_TYPE=cmakeใ€‚

  • ๅœจrootProject/CmakeList.txt็กฎ่ฎคๆ˜ฏๅฆๆทปๅŠ ๆœ‰SDKๆ‰€้œ€ๆ–‡ไปถๅŠๆ–‡ไปถๅคน่ทฏๅพ„ใ€‚

  • ็กฎ่ฎคๅœจrootProject/proj.andorid/local.propertiesๆ˜ฏๅฆ่พ“ๅ…ฅๆœ‰cmakeๅŠndkๅฎ‰่ฃ…ๆ ก้ชŒ็ผ–ๅทใ€‚

  • ๅˆ›ๅปบcmake้œ€่ฆNinjaใ€‚็กฎ่ฎคๅฎ‰่ฃ…ninjaใ€‚

  • ็‚นๅ‡ปๅˆ›ๅปบๆŒ‰้’ฎ๏ผ

3-2. ็”จNDKๅˆ›ๅปบ

  • ๅœจrootProject/proj.android/gradle.propertiesๅ†…็กฎ่ฎคPROP_BUILD_TYPE=ndk-buildใ€‚

  • ๅœจrootProject/proj.android/app/jni/Android.mkๆทปๅŠ SDKๆ‰€้œ€ๆ–‡ไปถๅŠๆ–‡ไปถๅคน่ทฏๅพ„ใ€‚

  • ็กฎ่ฎคๅœจrootProject/proj.andorid/local.propertiesๆ˜ฏๅฆ่พ“ๅ…ฅๆœ‰ndkๅฎ‰่ฃ…ๆ ก้ชŒ็ผ–ๅทใ€‚

  • ็‚นๅ‡ปๅˆ›ๅปบๆŒ‰้’ฎ๏ผ

ๅœจiOS้กน็›ฎๅบ”็”จNavergame SDK

NaverๆธธๆˆiOS SDKๆ”ฏๆŒiOS 12.0ๅŠไปฅไธŠ็‰ˆๆœฌใ€‚

่ฆไฝฟ็”จNaverๆธธๆˆSDK๏ผŒๅฏๅฆ‚ไธ‹ๆ‰€็คบ๏ผŒๅœจXCode่ฎพ็ฝฎๅผ€ๅ‘็Žฏๅขƒใ€‚

  • ้€‰ๆ‹ฉTARGETS้กน็›ฎไธญ่ฆ่ฟ่กŒ็š„ๅบ”็”จ็จ‹ๅบใ€‚

  • ้€‰ๆ‹ฉBuild Settingๆ ‡็ญพ๏ผŒๅœจLinking้กน็›ฎๆ‰พๅˆฐOther Linker Flagsใ€‚

    • Basicๆˆ–Customizedๆจกๅผไธ‹ๅฏ่ƒฝไธๆ˜พ็คบOther Linker Flagใ€‚่ฟ™็งๆƒ…ๅ†ต่ฏท้€‰ๆ‹ฉAllๆจกๅผใ€‚

    • ๅœจไฝไบŽๅณไธŠๆ–น็š„ๆœ็ดขๆ ่พ“ๅ…ฅOther Linker Flag๏ผŒๅฏ่ฝปๆพๆ‰พๅˆฐใ€‚

  • ๅœจOther Linker FlagsๆทปๅŠ -ObjC้€‰้กนๅ’Œ-lc++้€‰้กนใ€‚

  • ๅœจInfo.plistๆทปๅŠ ๅฆ‚ไธ‹ๅ–ๅพ—็”จๆˆทๆƒ้™้€‰้กนใ€‚

    • Privacy - Camera Usage Description

    • Privacy - Photo Library Usage Description

  • ้€‰ๆ‹ฉTARGETS้กน็›ฎไธญ่ฆ่ฟ่กŒ็š„ๅบ”็”จ็จ‹ๅบ๏ผŒๅœจInfoๆ ‡็ญพ็š„URL Types้กน็›ฎ่พ“ๅ…ฅIdentifierๅ€ผๅ’ŒURL Schemesๅ€ผใ€‚

  • Identifierๅ€ผๅฏๅœจ็›ธๅบ”TARGET็š„Generalๆ ‡็ญพ็กฎ่ฎคใ€‚

  • ๅฏนไบŽURL Schemesๅ€ผ๏ผŒๅช้œ€่พ“ๅ…ฅๅœจNAVER่ดฆๅท็™ปๅฝ•ๅผ€ๅ‘่€…ไธญๅฟƒ็™ป่ฎฐๅบ”็”จ็จ‹ๅบๆ—ถ่พ“ๅ…ฅ็š„URL Schemeๅณๅฏใ€‚

Last updated

Was this helpful?