# PC SDK Cocos2d-x チュートリアル

Windows Native開発環境でC++言語でチュートリアル用のHelloStoveプロジェクトにSTOVE PC SDKを連動する方法について説明します。

confirm このチュートリアルを進む前に、STOVE Launcher (opens new window)をインストールしてSDK開発環境を準備するを参照して、App key、App secret、Game Idを事前に発行する必要があります。

# チュートリアル用例題ソースコードダウンロード

下のリンクからチュートリアル用のHelloStoveプロジェクトをダウンロードします。

Hello StoveプロジェクトVisual Studio 2015 Update 3で作成され、Visual Studio 2019でも正常動作することがテストされました。 ダウンロードしたHelloStoveプロジェクトはSTOVEPCDKの連動方法を順次説明するためのソースコードなので、SDKとは連動していない状態です。 次の説明からSDKの連動方法を順次説明します。

# プロジェクトの環境構築

  • PC SDKダウンロードページから、最新バージョンのNative(C/C++) 配布ファイル(以後 StovePCSDKで記載)をダウンロードします。ファイルを解凍した後、コピーしてHelloStove_Nativeフォルダーの中に貼り付けます。

Figure1

ビジュアルスタジオを実行して HelloStove_Cocos2dx\proj」win32経路のHelloStove_Cocos2dx.slnを開きます。

# 1) ``追加のインクルード ディレクトリ` 設定

プロジェクトのプロパティページ(Alt + F7)を開き、C / C ++設定プロパティの追加インクルードディレクトリStovePCSDK_ {バージョン番号} /includeパスを追加します。

confirm チュートリアル例題は「win32/Release」環境を基準に説明します。 win32 / Debugは対応していないため、例題に従った場合、問題が発生することがあります。

プロジェクトプロパティページの「追加付きディレクトリー」に「StovePCSDK_{バージョン番号}/include」パスを追加します。

$(SolutionDir)StovePCSDK_2.3.1\include
1

Figure2

# 2) 追加のライブラリ ディレクトリ 設定

プロジェクトプロパティページの追加ライブラリディレクトリStovePCSDK_{バージョン番号}/bin」フォルダパスを追加します。

$(SolutionDir)..\StovePCSDK_2.1.0\bin\$(Platform)\$(Configuration)
1

Figure3

# 3) 追加の依存ファイル 設定

プロジェクトのプロパティーページの追加の依存ファイルStovePCSDK.libを追加します。

> Releaseモード : StovePCSDK.lib
1

Figure4

# 4) ソースファイルにStovePCSDK.hをincludeする。

Hello Stove.cppファイルを開き、下記の通り#includeStove PCSDK.hを追加します。

#include "HelloStove.h"
#include "SimpleAudioEngine.h"

/*ここに「チュートリアル」コードを追加します。*/
#include "StovePCSDK.h"
1
2
3
4
5

# 5) ビルドする

ビジュアルスタジオのビルドメニューからReleaseでソリューションビルドを実行します。 すべての設定に異常がなければ、コンパイルエラーなしで正常にビルドが完了します。 コンパイルエラーが発生した場合、エラーメッセージを確認し、パス設定や「プロジェクトの環境構成」をもう一度ご点検ください。

# SDK初期化

StovePCSSDKを初期化するには、StovePCConfig構造体に設定値を満たし、StovePCCallback構造体にコールバック関数を連結した後、StovePC_Init関数を呼び出します。
以下のコードをHelloStove::onClickedInit関数に作成します。

void CHelloStoveDlg::OnBnClickedInit()
{
    /*ここに「チュートリアル」コードを追加します。*/

    //config
    StovePCConfig config;
    memset(&config, 0, sizeof(StovePCConfig));

    config.env = "LIVE";
    config.appKey = "YOUR_APP_KEY";
    config.secretKey = "YOUR_SECRET_KEY";
    config.gameId = L"YOUR_GAME_ID";
    config.logLevel = StovePCLogLevel::STOVE_PC_LOG_LEVEL_DEBUG;
    config.logPath = L"";

    //callback 
    StovePCCallback callback;
    memset(&callback, 0, sizeof(StovePCCallback));

    callback.OnError = OnError;
    callback.OnInitComplete = OnInitComplete;
    callback.OnToken = OnToken;
    callback.OnUser = OnUser;

    StovePCResult result = StovePC_Init(config, callback);
    if (result != StovePCResult::STOVE_PC_NO_ERROR)
    {
        std::string error = StringUtils::format("[ERROR] StovePC_Init, Result: %d", result);
        logOutput(LogType::LogError, error);
    }
    else
    {
        std::string success = "[OK] StovePC_Init";
        logOutput(LogType::LogSuccess, success);

        //StovePC_Init 関数の呼び出しに成功したため、
        //タイマーから定期的にStovePC_RunCallback関数を呼び出します。
        schedule(schedule_selector(HelloStove::updateTimer), 1.0f);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40

confirm "YOUR_APP_KEY"、"YOUR_SECRET_KEY"、"YOUR_GAME_ID"はSTOVE Studio (opens new window)から事前に発行されたデータに変更する必要があります。 STOVE Studioに入店申請したSTOVEアカウントでSTOVEランチャーにログインせずに「StovePC_Init」関数が呼び出されると、150エラーコード(sgup初期化失敗)が発生します。

StovePC_Init関数が成功的に呼び出しされれば、STOVE_PC_NO_ERRORが、リターン・なります。STOVE_PC_NO_ERRORが成功的にリターンなると、タイマー(Timer)を通じてStovePC_RunCallback関数が周期的に呼び出しされるようにご処理ください。 これらの処理はCocos2d-xのタイマーであるschedule関数で1秒ごとに実行するコールバックHelloStove::updateTimer関数を設定してupdateTimer関数の中でStovePC_RunCallback関数が周期的に実行されるようにします。

void HelloStove::updateTimer(float time)
{
    /*ここに「チュートリアル」コードを追加します。*/
    StovePC_RunCallback();
}
1
2
3
4
5

StovePC_Init関数が正常に実行されればcallback.OnInitComplete=OnInitCompleteにかけておいたコールバックOnInitComplete関数が実行され、この関数の注釈を外し、以下のコードを入力します。

void OnInitComplete()
{
    /*ここに「チュートリアル」コードを追加します。*/
    std::stringstream ss;
    ss << "<Init Complete>" << std::endl;

    // HelloStove例題画面にssテキストを表示する。
    GetHelloStove()->logOutput(LogType::LogNormal, ss.str(), 1);
}

1
2
3
4
5
6
7
8
9
10

StovePC_Init関数、または他のStovePCSDK関数呼び出しに失敗した時に呼び出されるコールバックOnError関数の注釈を外し、以下のコードを入力します。

void OnError(const StovePCError error)
{
    /*ここに「チュートリアル」コードを追加します。*/
    std::stringstream ss;
    ss << "<Error>" << std::endl
        << error.functionType << std::endl
        << error.result << std::endl
        << error.message << std::endl
        << error.externalError << std::endl;

    GetHelloStove()->logOutput(LogType::LogError, ss.str(), 5);
}
1
2
3
4
5
6
7
8
9
10
11
12

# SDK終了

StovePCSDK関数のすべての使用が終わった後にStovePCSDKで使用中のリソースを整理してリードして設定したタイマーを停止するために下記コードをHelloStove::onClickedUnInitialize関数に入力します。

void HelloStove::onClickedUnInitialize(Ref* pSender)
{
    /*ここに「チュートリアル」コードを追加します。*/
    StovePCResult result = StovePC_UnInit();
    if (result != StovePCResult::STOVE_PC_NO_ERROR)
    {
        std::string error = StringUtils::format("[ERROR] StovePC_UnInit, Result: %d", result);
        logOutput(LogType::LogError, error);
    }
    else
    {
        unschedule(schedule_selector(HelloStove::updateTimer));
        std::string success = "[OK] StovePC_UnInit";
        logOutput(LogType::LogSuccess, success);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# ユーザー情報を取得

STOVEランチャーによりゲームを実行したユーザー情報は、StovePCSDKのStovePC_GetUser関数で入手できます。 以下のコードをHelloStove::onClickedGetUser関数に入力して、StovePC_GetUser関数の使い方を確認してください。

void HelloStove::onClickedGetUser(Ref* pSender)
{
    /*ここに「チュートリアル」コードを追加します。*/
    StovePCResult result = StovePC_GetUser();
    if (result != StovePCResult::STOVE_PC_NO_ERROR)
    {
        std::string error = StringUtils::format("[ERROR] StovePC_GetUser, Result: %d", result);
        logOutput(LogType::LogError, error);
    }
    else
    {
        std::string success = "[OK] StovePC_GetUser";
        logOutput(LogType::LogSuccess, success);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

StovePC_GetUser関数が正常に実行されると、コールバックOnUser関数が呼び出しられ、StovePCUserパラメータでユーザー情報を獲得できます。 以下のコードをご確認ください。

void OnUser(const StovePCUser user)
{
    /*ここに「チュートリアル」コードを追加します。*/
    std::stringstream ss;

    ss << "<UserInfo>" << "\n"   
        << " memberNo: " << user.memberNo << "\n"
        << " nickname: " << g_converter.to_bytes(user.nickname) << "\n"       
        << " gameUserId: " << user.gameUserId << "\n";

    GetHelloStove()->logOutput(LogType::LogNormal, ss.str(), 5);
}
1
2
3
4
5
6
7
8
9
10
11
12

# トークン情報を取得

StovePC_GetToken関数はトークン情報を得て来る時に使用します。 下段のコードをHelloStove::onClickedGetToken関数に入力します。

confirm トークンとは? STOVEランチャーにログインしたユーザーのアクセストークン(Access Token)で、ゲームサーバーはこのアクセストークンをSTOVE認証サーバーに渡してログインしたユーザーの検証を行うことができます。 アクセストークンの詳細な説明は、STOVEインディチームにお問い合わせ (opens new window)で技術サポートを受けることができます。

void HelloStove::onClickedGetToken(Ref* pSender)
{
    /*ここに「チュートリアル」コードを追加します。*/
    StovePCResult result = StovePC_GetToken();
    if (result != StovePCResult::STOVE_PC_NO_ERROR)
    {
        std::string error = StringUtils::format("[ERROR] StovePC_GetToken, Result: %d", result);
        logOutput(LogType::LogError, error);
    }
    else
    {
        std::string success = "[OK] StovePC_GetToken";
        logOutput(LogType::LogSuccess, success);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

Stove PC_Get Token関数が正常に呼び出されると、コールバックOn Token関数のトークン値を以下のコードで確認できます。

void OnToken(const StovePCToken token)
{
    /*ここに「チュートリアル」コードを追加します。*/
    std::stringstream ss;
    ss << "<Token>" << "\n"
        << token.accessToken;

    GetHelloStove()->logOutput(LogType::LogNormal, ss.str(), 2);
}
1
2
3
4
5
6
7
8
9

# ビルド及び実行

ビルドが完了したHelloStove_Cocos2dx.exe実行のためにはStovePCSDK_{バージョン番号}\bin\Win32\Releaseフォルダの動的ライブラリ(DLL)ファイルをHelloStove_Cocos2dx\proj.win32\Release.win32フォルダにコピーしてください。

Figure5

ファイルのコピーが完了したら、STOVEランチャーを実行して、STOVE Studioに登録したIDでログインします。

さて、ビジュアルスタジオでF5を押してHelloStoveプロジェクトをビルドして実行します。 HelloStove画面のボタンを順番に押して見ながら、正常に動作するかを確認します。

Figure6

おめでとうございます!
StovePCSDKをCocos2d-xへの連動に成功しました。

Last Updated: 2023/7/15 15:21:26