cocococococos 2 dxはネットワーク画像を取得して、精霊を作成して画面に表示します.

5577 ワード

参考記事:http://blog.csdn.net/candyforever/article/details/10185855
TestGet PicFroomHttp.h
#ifndef __TESTGETPICFROMHTTP_H__
#define __TESTGETPICFROMHTTP_H__

#include "cocos2d.h"
#include "cocos-ext.h"

USING_NS_CC;
USING_NS_CC_EXT;

class TestGetPicFromHttp : public cocos2d::CCLayer
{
private:
    TestGetPicFromHttp();
    ~TestGetPicFromHttp();
   
public:
    virtual bool init();
    CREATE_FUNC(TestGetPicFromHttp);
    
    void initHttpInfo(void);
    void onGetFinished(CCHttpClient *client, CCHttpResponse *response);
    void setGetTextureVisible(void);

    static TestGetPicFromHttp* get_instance(void);
    
private:
    static TestGetPicFromHttp* m_instance;
};

#endif // __TESTGETPICFROMHTTP_H__
TestGet PicFroom Http.cpp
#include "TestGetPicFromHttp.h"

#include 
#include 
using namespace std;

TestGetPicFromHttp* TestGetPicFromHttp::m_instance = 0;
TestGetPicFromHttp::TestGetPicFromHttp()
{
    
}

TestGetPicFromHttp::~TestGetPicFromHttp()
{
    
}

// on "init" you need to initialize your instance
bool TestGetPicFromHttp::init()
{
    if ( !CCLayer::init() )
    {
        return false;
    }

    initHttpInfo();
    
    return true;
}

void TestGetPicFromHttp::initHttpInfo(void)
{
    CCHttpClient* httpClient = CCHttpClient::getInstance();
    CCHttpRequest* httpRequest = new CCHttpRequest();
    httpRequest->setRequestType(CCHttpRequest::kHttpGet);
    httpRequest->setUrl("https://img-my.csdn.net/uploads/201405/12/1399882123_6429.jpg");
    httpRequest->setResponseCallback(this, httpresponse_selector(TestGetPicFromHttp::onGetFinished));
    httpRequest->setTag("PicGet");
    httpClient->setTimeoutForConnect(30); //        
    httpClient->send(httpRequest);
    httpRequest->release();
    httpRequest = NULL;
}

void TestGetPicFromHttp::onGetFinished(CCHttpClient *client, CCHttpResponse *response)
{
    //            
    if (!response->isSucceed())
    {
        CCLog("Receive Error! %s
",response->getErrorBuffer()); return ; } const char* tag = response->getHttpRequest()->getTag(); if (0 == strcmp("PicGet",tag)) { vector *data = response->getResponseData(); int data_length = data->size(); string res; for (int i = 0;i *buffer = response->getResponseData(); string path = CCFileUtils::sharedFileUtils()->getWritablePath()+"head2.png"; pBuffer = CCFileUtils::sharedFileUtils()->getFileData(path.c_str(), "r", &bufferSize); string buff(buffer->begin(),buffer->end()); // CCLOG("path: %s",path.c_str()); FILE *fp = fopen(path.c_str(), "wb+"); fwrite(buff.c_str(), 1,buffer->size(), fp); fclose(fp); setGetTextureVisible();// } void TestGetPicFromHttp::setGetTextureVisible(void) { unsigned char* pBuffer = NULL; unsigned long bufferSize = 0; string path = CCFileUtils::sharedFileUtils()->getWritablePath()+"head2.png"; pBuffer = CCFileUtils::sharedFileUtils()->getFileData(path.c_str(), "r", &bufferSize); if (!pBuffer) { return ; } CCImage* img = new CCImage(); img->initWithImageData(pBuffer,bufferSize); free(pBuffer); CCTexture2D* texture = new cocos2d::CCTexture2D(); bool isImg = texture->initWithImage(img); img->release(); if (!isImg) { delete texture; return ; } // , , ! CCSprite* m_get_sprite = CCSprite::createWithTexture(texture); CCSprite* sprite = CCSprite::createWithTexture(m_get_sprite->getTexture()); if (sprite) { this->addChild(sprite); CCSize winSize = CCDirector::sharedDirector()->getWinSize(); this->setPosition(ccp(winSize.width/2, winSize.height/2)); } texture->release(); } TestGetPicFromHttp* TestGetPicFromHttp::get_instance(void) { if (m_instance == NULL) { m_instance = TestGetPicFromHttp::create(); } return m_instance; }
使用方法:Hello World Scene.cppで呼び出す
TestGetPicFromHttp* httpLayer = TestGetPicFromHttp::get_instance();
this->addChild(httpLayer);
httpLayer->init();
cocos2dx 获取网络图片并创建精灵显示到界面上_第1张图片
最後の説明:
1.Androidを実行する前に、Android Manifest.xmlでネットワークを開いて、SDカードなどの権限を読み取り、表示しないようにしてください.