Hatena::Groupbabel

カーネルハッカーを目指す男の日記

 | 

2014-11-09

cocos2d-xにて、httpで画像を取得する

17:33

散々悩んだが、一旦これで行く。

void HelloWorld::onHttpRequestCompleted(HttpClient* sender, HttpResponse* response)
{
    if ( ! response->isSucceed() ) {
        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 = Sprite::createWithTexture(texture);
    Size visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    Size size = sprite->getContentSize();
    sprite->setPosition(Vec2((visibleSize.width + origin.x)/2,
                             (visibleSize.height + origin.y)/2));
    this->addChild(sprite, 100);
    image->release();
    texture->release();
}
void HelloWorld::getExternalImage(char const *url)
{
    HttpRequest* request = new HttpRequest();
    request->setUrl(url);
    request->setRequestType(HttpRequest::Type::GET);
    request->setResponseCallback( CC_CALLBACK_2(HelloWorld::onHttpRequestCompleted, this) );
    HttpClient::getInstance()->send(request);
    request->release();
}

呼び出し元

this->getExternalImage("適当なurl");

これだと、getExternallImageがHelloWorld::onHttpRequestCompletedに依存してしてしまい、あまり汎用的ではない。

HelloWorld::onHttpRequestCompletedも、座標が固定になっているので、任意の位置に描画させるのが難しい。

今のところ解決策は、画像サーバーから画像を取得した時に、座標も一緒に返してもらうくらいか。

 |