既出の感がありますが、まぁ、やってみたってことで。
以下のソースでいけます。
#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++ はまだまだ修行が必要そうです。