Cocos2D-x クイックスタート

この quickstart は、Cocos2d-x エンジンで最初の PlayFab API の呼び出しを行うのに役立ちます。

PlayFab API を呼び出すには、 Playfab の開発者アカウントが必要です。

Cocos2d-x プロジェクトのセットアップ

OS: このガイドは、Visual Studio 2015 を使用して、Windows 10 用に作成されています。 ココスは最新の Os と環境で動作します。 インストール手順は似ていますが、それぞれの組み合わせによって異なります。

他のプラットフォーム用に構築している場合、必要なファイルは同じですが、プロジェクトのセットアップを自分で行う必要があります。 Visual Studio 2013 の手順は同じですが、ここで提供されているスクリーンショットは、ご自身とは少し異なります。

  1. Cocos2d をダウンロードしてインストールする-x

  2. Cocos2d を設定したら、次のようにして、ココス CLI を使用してプロジェクトを作成します。

    • ココスプロジェクトを保存する場所に移動します。

    • 親フォルダーでコマンドウィンドウを開く (「ココス CLI は実際のプロジェクトディレクトリを作成する」)

      • Shiftキーを押しながら、エクスプローラーウィンドウの空白の空白部分を右クリックします。

        ココス CLI-コマンドウィンドウを開く

    • [新しいコンソール] ウィンドウで、次のコマンドを入力します。

      • cocos new CocosGettingStarted -l cpp
        • ターゲットサブディレクトリ (CocosGettingStarted) がまだ存在していないことを確認します。フォルダーが既に存在する場合は、このコマンドは失敗します。
        • 「"ココス" が内部または外部のコマンドとして認識されないというメッセージが表示される場合は、ココスのインストールを正しく構成していません (「ココス windows インストールガイド」に戻ってください)。
        • 成功すると、新しいフォルダー CocosGettingStartedが表示されます。 このガイドでは、ディレクトリの場所を{CocosGettingStarted}と呼びます。
    • 成功した場合の結果は、次の例のように表示されます。

> Copy template into C:\dev\CocosGettingStarted
> Copying Cocos2d-x files...
> Rename project name from 'HelloCpp' to 'CocosGettingStarted'
> Replace the project name from 'HelloCpp' to 'CocosGettingStarted'
> Replace the project package name from 'org.cocos2dx.hellocpp' to 'org.cocos2dx.CocosGettingStarted'
> Replace the Mac bundle id from 'org.cocos2dx.hellocpp' to 'org.cocos2dx.CocosGettingStarted'
> Replace the iOS bundle id from 'org.cocos2dx.hellocpp' to 'org.cocos2dx.CocosGettingStarted'
  1. PlayFab Cocos2d-xSdk: Cocos2d-x sdk (C++)をダウンロードします。 保存して一時的な場所に抽出する {PlayFabCocos}

    • Windows エクスプローラーで次のフォルダーを開きます。 {PlayFabCocos}/PlayFabClientSDK
    • 2つ目の Windows エクスプローラーで次のフォルダーを開きます。 {CocosGettingStarted} クラス
  2. "{PlayFabCocos}/PlayFabClientSDK から {CocosGettingStarted}/クラスにすべてのファイルをコピーする

  3. Visual Studio で、を{CocosGettingStarted}/proj.win32/CocosGettingStarted.sln読み込みます。

  4. ここでは、PlayFab ファイルをココスプロジェクトに追加します。

  5. Visual Studio のソリューションエクスプローラーパネルで、フォルダーに展開します。ソリューション/CocosGettingStarted/src

  6. {CocosGettingStarted} クラスで Windows エクスプローラーウィンドウを開く

    • CocosGettingStarted} または Classes (AppDelegate)、HelloWorldScene、HelloWorldScene を除くすべてのファイルを選択します。

    • これらのすべてのファイルをエクスプローラーからドラッグアンドドロップして、上に示した Visual Studio Solution/CocosGettingStarted/src フォルダーにドロップします。 問題が発生した場合は、各ファイルを一度に1つずつドラッグアンドドロップするだけで、注意してすべてのファイルを取得することができます。

    • VS プロジェクトに次のファイルが表示されるはずです。

      ソリューションエクスプローラー-VS プロジェクトファイル

PlayFab は、依存関係リストに手動で追加する必要がある、複数のココスライブラリを使用します。

  • 次に示すように、CocosGettingStarted プロジェクトの [プロパティ] ウィンドウを開きます。

    プロパティウィンドウ-ココスのインクルードディレクトリ

  • 追加の Include ディレクトリを次のように置き換えます。

    $(ProjectDir)..\cocos2d\external\zlib\include;$(ProjectDir)..\cocos2d\external\curl\include\win32;$(EngineRoot)cocos\audio\include;$(EngineRoot)external;$(EngineRoot)external\chipmunk\include\chipmunk;$(EngineRoot)extensions;..\Classes;..;%(AdditionalIncludeDirectories);$(_COCOS_HEADER_WIN32_BEGIN);$(_COCOS_HEADER_WIN32_END);..\cocos2d

注意

ここでは、curl と zlib を追加していますが、このライブラリは、ココスに付属していますが、既定では有効になっていません。

これで、CocosGettingStarted プロジェクトがコンパイル (および実行) されますが、PlayFab API 呼び出しはまだ行っていません。

インストール完了

初めての API 呼び出しを設定する

このガイドでは、最初の PlayFab API 呼び出しを行うための最小の手順について説明します。 アプリに確認が表示されます。

  1. Visual Studio のソリューション/CocosGettingStarted/src フォルダーの内部で、HelloWorldScene を開いて、次の内容に置き換えます。
    • Visual Studio のソリューション/CocosGettingStarted/srcフォルダーの内部で、次のHelloWorldScene.hように内容を開いて置き換えます。
#ifndef __HELLOWORLD_SCENE_H__
#define __HELLOWORLD_SCENE_H__

#include "cocos2d.h"
#include "PlayFabClientDataModels.h"
#include "PlayFabError.h"

class HelloWorld : public cocos2d::Layer
{
public:
    static std::string statusMsg;
    static cocos2d::Scene* createScene();
    static cocos2d::Label* testReportLabel;
    virtual bool init();
    void update(float) override;
    void menuCloseCallback(cocos2d::Ref* pSender);
    CREATE_FUNC(HelloWorld);

    static void HelloWorld::OnLoginSuccess(const PlayFab::ClientModels::LoginResult& result, void* customData);
    static void HelloWorld::OnLoginFail(const PlayFab::PlayFabError& error, void* customData);
};

#endif // __HELLOWORLD_SCENE_H__
  1. その横にある [] HelloWorldScene.cppを開いて、内容を次のように置き換えます。
#include "HelloWorldScene.h"
#include "PlayFabClientAPI.h"
#include <PlayFabSettings.h>

USING_NS_CC;

std::string HelloWorld::statusMsg;
cocos2d::Label* HelloWorld::testReportLabel;

Scene* HelloWorld::createScene()
{
    auto scene = Scene::create(); // 'scene' is an autorelease object
    auto layer = HelloWorld::create(); // 'layer' is an autorelease object
    scene->addChild(layer); // add layer as a child to scene
    return scene; // return the scene
}

bool HelloWorld::init()
{
    if (!Layer::init())
        return false;

    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    auto closeItem = MenuItemImage::create("CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
    closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width / 2, origin.y + closeItem->getContentSize().height / 2));

    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);
    this->scheduleUpdate();

    testReportLabel = Label::createWithTTF("", "fonts/Marker Felt.ttf", 14);
    this->addChild(testReportLabel, 1);

    statusMsg = "Login pending...";
    PlayFab::PlayFabSettings::titleId = "144";
    PlayFab::ClientModels::LoginWithCustomIDRequest request;
    request.CustomId = "GettingStartedGuide";
    request.CreateAccount = true;
    PlayFab::PlayFabClientAPI::LoginWithCustomID(request, OnLoginSuccess, OnLoginFail, nullptr);

    return true;
}

void HelloWorld::menuCloseCallback(Ref* pSender)
{
    Director::getInstance()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

void HelloWorld::update(float delta)
{
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();

    testReportLabel->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height / 2));
    testReportLabel->setString(statusMsg);
}

void HelloWorld::OnLoginSuccess(const PlayFab::ClientModels::LoginResult& result, void* customData)
{
    statusMsg = "Congratulations, you made your first successful API call!";
}


void HelloWorld::OnLoginFail(const PlayFab::PlayFabError& error, void* customData)
{
    statusMsg = "Something went wrong with your first API call.\n";
    statusMsg += "Here's some debug information:\n";
    statusMsg += error.GenerateErrorReport();
}

これらのファイルは、新しいココス-プロジェクトテンプレートの一部である既存の HelloWorldScene を取得し、それを変更して、最初の PlayFab API 呼び出しを含めます。

完了して実行する

  1. ココスプロジェクトをビルドして実行する: ドロップダウン > デバッグ-> デバッグを開始します。

  2. これにより、作成を求めるメッセージが表示されることがあります。 [はい] を選択します。

  3. 次のような画面が表示されます。

    初めて API 通話を成功させました!

  4. これで、他の api の呼び出しを開始し、ゲームを作成することができます。
    利用可能なすべてのクライアント API 呼び出しの一覧については、「 Playfab Api リファレンスドキュメント」をご覧ください。

コーディングをお楽しみください!

コードの Deconstruct

この省略可能な最後のセクションでは、上のソースコードの各部分について詳しく説明します。

  • HelloWorldScene.h

    • これは、ココスによって生成HelloWorldScene.hされたデフォルトからのみ変更されます。
    • 具体的には、お客様が使用しているココスの GUI OnLoginSuccessOnLoginFail、のプロトタイプを定義しています。
    • その他のものは、標準のココスエンジン関数だけです。
  • HelloWorldScene.cpp

    • createScene() は標準のココスエンジン関数です。

    • init()

      • 通常のココスの Gui closeItem : testReportLabelと。

      • PlayFab::PlayFabSettings::titleId = "xxxx";

        • すべての PlayFab 開発者は、ゲームマネージャーでタイトルを作成します。 ゲームを公開するときは、ゲームに titleId することをコード化する必要があります。 これにより、クライアントは PlayFab 内の正しいデータにアクセスする方法を把握できます。 ほとんどのユーザーは、PlayFab 作業を行う必須の手順を検討してください。
      • PlayFab::ClientModels::LoginWithCustomIDRequest request;

        • ほとんどの PlayFab API メソッドには入力パラメーターが必要です。これらの入力パラメーターは、要求オブジェクトにパックされます。
        • 各 API メソッドには、オプションパラメーターと必須パラメーターを組み合わせた一意の要求オブジェクトが必要です。
          • LoginWithCustomIDRequestは、プレーヤー CreateAccountを一意に識別CustomIdする必須パラメーターがあります。これにより、この呼び出しで新しいアカウントを作成することができます。
        • Login の場合、ほとんどの開発者は、より適切な login メソッドを使用します。
          • すべてのログインメソッドの一覧と入力パラメーターについては、「PlayFab のログインドキュメント」を参照してください。 一般的な選択肢は次のとおりです。
            • LoginWithAndroidDeviceID
            • LoginWithIOSDeviceID
            • LoginWithEmailAddress
      • PlayFab::PlayFabClientAPI::LoginWithCustomID(request, OnLoginSuccess, OnLoginFail, nullptr);

        • これにより、へLoginWithCustomIDの非同期要求が開始さOnLoginSuccessOnLoginFail 、完了時に or 関数が呼び出されます。
    • update(float delta)

      • 変数を設定statusMsgするだけでは、画面上のテキストは更新されません。
      • この関数は、すべてのチェックボックスのstatusMsg内容に合わせて GUI テキストを設定します (あまり効率的ではありません)。
    • OnLoginSuccess(result, customData)

      • 成功コールバックが呼び出されると、多くの API コールバックの result オブジェクトには、要求された情報が含まれます。
      • LoginResult プレーヤーについての基本的な情報が含まれていますが、ほとんどのユーザーは、他の Api を呼び出す前に、login が必須の手順です。
    • OnLoginFail(error, customData)

      • エラー関数が呼び出されると、API の呼び出しが失敗します。
      • API 呼び出しは、多くの理由で失敗することがあり、常に失敗を処理する必要があります。
      • API の呼び出しが失敗する理由 (尤度順)
        • PlayFabSettings.TitleId が設定されていません。 TitleId をタイトルに設定し忘れた場合は、何も機能しません。
          • ココスでは、titleId を正しく設定できなかった場合に、curl ライブラリがゲームをクラッシュする可能性があります。
        • 要求パラメーター。 特定の API 呼び出しに対して適切または必須の情報を指定していない場合は、失敗します。 詳細error.errorMessageerror.errorDetailsついてerror.GenerateErrorReport()は、、、またはを参照してください。
        • デバイス接続の問題。 携帯電話は常に接続を失い、再利用するため、どのような時点でも、どの API 通話もランダムに失敗し、その後すぐに動作することができます。 トンネルに入ると、完全に切断されることがあります。
        • PlayFab サーバーの問題。 すべてのソフトウェアと同様に、問題が発生する可能性があります。 最新情報については、リリースノートを参照してください。
        • インターネットの信頼性は、100% にはありません。 メッセージが破損しているか、PlayFab サーバーに到達していないことがあります。
      • 問題のデバッグが困難であり、エラーコールバック内の情報が不十分な場合は、フォーラムで skype にご連絡ください。
    • customData は、任意の方法でコンテキストを確立するために使うことができる void ポインターです。

      • C++ では、API 呼び出しのコンテキストを維持することは困難であるため、 customDataパラメーターを追加しました。これは、コンテキストを確立するために使用できます。
      • そのため、API 呼び出しを行ってインベントリを取得する場合は、コールバックで、プレイヤーまたcustomDataはインベントリポインターを as で渡したり、そのオブジェクトのインベントリを更新したりすることができます。