Prainブログ

ゲーム開発とかIT小話とかその他雑記のブログ

*

Cocos2d-x Http通信の完了に同期して処理を実行する

      2017/03/23

cocos2dx

 

こんにちは、akiです。

この記事ではHttp通信処理の完了に同期して任意の処理を実行するやり方を説明します。

やり方は簡単でHttp通信のコールバックの中にカスタムイベントを発行する処理を記述するだけです。カスタムイベント発行先に任意の処理を記述してやりましょう。

 

■環境

XCode:8.2.1

Cocos2d-x:3.9

 

カスタムイベントについてはこちらの記事(内部リンク)を参照して下さい。

こんにちは、akiです。この記事ではカスタムイベントの使い方について説明します。 カスタムイベントとは、ユーザが自由に処理を記述できるイベントのことです。イベントを発行するディスパッチャと、発行されたイベントを受け取るイベントリスナーの2つから構...

 

 

スポンサーリンク

 

 

ソースコード

void sendHttpRequestAndExecEvent(){
    auto r = new cocos2d::network::HttpRequest();
    r->setUrl("リクエスト送信先のURL");
    std::vector<std::string> h;
    h.push_back("Content-Type: application/json");
    r->setHeaders(h);
    r->setRequestType(HttpRequest::Type::POST);
    
    // データの設定(json形式)
    std::string userId = "userId";
    std::string password = "password";
    std::string data = "[{\"userId\":\"" + userId + "\", \"password\":\"" + password + "\"}]";
    const char* buffer = data.c_str();
    r->setRequestData(buffer, strlen(buffer));
 
    // コールバックの設定
    r->setResponseCallback([this, eventId](cocos2d::network::HttpClient* client, cocos2d::network::HttpResponse* response){
        if(response->isSucceed()){
            // カスタムイベントの発行
            auto event = EventCustom(eventId);
            Director::getInstance()->getEventDispatcher()->dispatchEvent(&event);

            return true;
        }else{
            return false;
        }
    });
 
    // データ送信
    network::HttpClient::getInstance()->send(r);
    r->release();
}

 

 

その他ポイント

Http通信中もクライアント側のメインループは動いているので、タップイベントなどを取得することができてしまう。

・ですので、通信中に操作させたくない場合はタップイベントを停止したり、モーダルレイヤなどを現在のレイヤの上にかぶせるなどの対応が必要。

 

 

以上です。

 

 -

        

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

  関連記事

cocos2dx
Cocos2d-x カスタムイベントを削除するタイミング

こんにちは、akiです。 この記事ではカスタムイベントを削除するタイミングについ …

回復エフェクト
Cocos2d-x アニメーションを利用した回復エフェクトの表示方法

この記事では、Cocos2d-xのアニメーションを利用したエフェクトの表示方法に …

エフェクト
Cocos2d-x 加算合成を利用して、背景が黒い画像をアニメーションで使えるようにする方法

アニメーションを利用してエフェクト表示するときに、以下のようなエフェクト素材を目 …

ボールの進行方向
ゲーム制作 Cocos2d-x関連 第6回 「画面端でのボールの跳ね返り」

今回は画面端でのボールの跳ね返りを製作していきましょう。   前回では …

cocos2dx
Cocos2d-x セーブデータをサーバに送信して保存する

こんにちは、akiです。 この記事ではクライアントからサーバにセーブデータを送信 …