cocococococos 2 dxはネットワーク画像を取得して、精霊を作成して画面に表示します.
5577 ワード
参考記事:http://blog.csdn.net/candyforever/article/details/10185855
TestGet PicFroomHttp.h
最後の説明:
1.Androidを実行する前に、Android Manifest.xmlでネットワークを開いて、SDカードなどの権限を読み取り、表示しないようにしてください.
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();
最後の説明:
1.Androidを実行する前に、Android Manifest.xmlでネットワークを開いて、SDカードなどの権限を読み取り、表示しないようにしてください.