LoginSignup
10
11

More than 5 years have passed since last update.

HttpRequestで画像の取得と表示 (Cocos2d-x V3.0 rc1)

Last updated at Posted at 2014-04-05

既出の感がありますが、まぁ、やってみたってことで。

以下のソースでいけます。

#include "HelloWorldScene.h"

USING_NS_CC;

using namespace network;

Scene* HelloWorld::createScene()
{
    auto scene = Scene::create();
    auto layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}

bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
    HttpRequest* request = new HttpRequest();
    request->setUrl("http://www.google.co.jp/images/srpr/logo11w.png");
    request->setRequestType(HttpRequest::Type::GET);
    request->setResponseCallback(this, httpresponse_selector(HelloWorld::onHttpRequestCompleted));
    HttpClient::getInstance()->send(request);
    request->release();

    return true;
}

void HelloWorld::onHttpRequestCompleted(HttpClient* sender, HttpResponse* response)
{
    if (!response)
    {
        log("no response");
        return;
    }
    if (!response->isSucceed())
    {
        log("response failed");
        return;
    }

    std::vector<char>* buffer = response->getResponseData();

    Image* image = new Image();
    image->initWithImageData(reinterpret_cast<unsigned char*>(&(buffer->front())), buffer->size());

    Texture2D* texture = new Texture2D();
    texture->initWithImage(image);
    Sprite* sprite = CCSprite::createWithTexture(texture);

    Size visibleSize = Director::getInstance()->getVisibleSize();
    sprite->setPosition(Point(visibleSize.width / 2, visibleSize.height / 2));

    addChild(sprite);
}

ハマりどころは

    request->setRequestType(HttpRequest::Type::GET);

の指定をしないと signal SIGABRT で怒られるあたりでしょうか。

あとは reinterpret_cast の存在を知らなかった事。C++ はまだまだ修行が必要そうです。

kobito.1396692879.846691.png

10
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
11