博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】
阅读量:6938 次
发布时间:2019-06-27

本文共 3948 字,大约阅读时间需要 13 分钟。

今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片;

经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - http的异步方法,相信有很多地方都会使用

到着这个需求;比如获取玩家的头像。

我就直接贴代码了,只需一个类就可以搞定;

HttpGetImg.h

#ifndef __HttpGetImg__#define __HttpGetImg__#include "cocos2d.h"#include "HttpRequest.h"#include "HttpClient.h"USING_NS_CC_EXT;using namespace std;USING_NS_CC;class HttpGetImg : public cocos2d::CCLayer{public:        HttpGetImg();    ~HttpGetImg();    //获取网络图片,需要地址    static void GetHttpImg(CCObject* obj, string imgurl,int number);        void onHttpRequestRptImg(cocos2d::extension::CCHttpClient *sender, cocos2d::extension::CCHttpResponse *response);    //按原来默认头像比例设置新图片大小    static void setImgSize(int oldhead_w,int oldhead_h,CCSprite* sprite);        //创建图片覆盖原有图片    static void CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag);private:    };#endif /* HttpGetImg */

HttpGetImg.cpp

#include "HttpGetImg.h"#include "../DataModel/GlobalInfo.h"#include "../GameConfig.h"#include "../Commen/PublicDoFunc.h"HttpGetImg::HttpGetImg(void){    }void HttpGetImg::GetHttpImg(CCObject* obj, string imgurl,int number){    CCHttpRequest* request = new CCHttpRequest();    // required fields    request->setUrl(imgurl.c_str());    request->setRequestType(CCHttpRequest::kHttpGet);    request->setResponseCallback(obj, httpresponse_selector(HttpGetImg::onHttpRequestRptImg));    // optional fields    char thisnumber[10] = "";    sprintf(thisnumber, "%d",number);    request->setTag(thisnumber);    CCHttpClient::getInstance()->send(request);    request->release();}void HttpGetImg::onHttpRequestRptImg(CCHttpClient *sender, CCHttpResponse *response){        char c_tag[20]= "";    sprintf(c_tag, "%s",response->getHttpRequest()->getTag());    //    CCLog("%s completed", response->getHttpRequest()->getTag());    string str_tag = c_tag;    if (!response)    {        return;    }    // You can get original request type from: response->request->reqType    if (0 != strlen(response->getHttpRequest()->getTag()))    {        //        CCLog("%s completed", response->getHttpRequest()->getTag());    }        if (!response->isSucceed())    {        CCLog("response failed");        CCLog("error buffer: %s", response->getErrorBuffer());        return;    }        vector
*buffer = response->getResponseData(); //create image CCImage* img = new CCImage; img->initWithImageData((unsigned char*)buffer->data(),buffer->size()); //create texture CCTexture2D* texture = new CCTexture2D(); bool isImg = texture->initWithImage(img); img->release();    //将texture存下来 texture //已下是自己封装的PublicDoFunc异步调用主线程执行换图操作的部分,可以自己去封装 //SEL_CallFuncN pfnCallback =callfuncN_selector(View_Room::upPlayerHead); //CCNode* nd = CCNode::create(); //buffer->clear(); //nd->setTag(CCString::create(str_tag)->intValue()); //PublicDoFunc::toDoFuncN(LAYER_ROOM, pfnCallback,nd);}void HttpGetImg::setImgSize(int oldhead_w,int oldhead_h,CCSprite* sprite){ float s_X=oldhead_w/sprite->getContentSize().width; float s_Y=oldhead_h/sprite->getContentSize().height; sprite->setScaleX(s_X); sprite->setScaleY(s_Y);}void HttpGetImg::CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag){ int oldw =oldSprite->getContentSize().width; int oldh =oldSprite->getContentSize().height; if(texture!=NULL) { CCSprite* sprite = CCSprite::createWithTexture(texture); //按原比例设置 setImgSize(oldw,oldh,sprite); sprite->setPosition(oldSprite->getPosition()); tagSprite->addChild(sprite,1,newTag); texture->release(); }}HttpGetImg::~HttpGetImg(void){ }

 

代码非常简洁简单,先通过:

GetHttpImg(CCObject* obj, string imgurl,int number);

获取到texture,然后把texture存起来,在自己要展示的页面去调用:

CreateImg(CCSprite* tagSprite,CCSprite* oldSprite,CCTexture2D* texture,int newTag)

第一个参数是要展示的父级sprite,第二个是默认头像图片(如果没有下载成功网络图片,显示替代图片),第三个是缓存的texture;

 

效果图:

 

结束,祝大家新年快乐;

ps:群号(41131516

 

 

 

 

 

转载地址:http://flpjl.baihongyu.com/

你可能感兴趣的文章
apollo实现c#与android消息推送(一)
查看>>
hbase自定义比较器
查看>>
接口与抽象类的区别?区别就是抽象类已经(渐渐地渐渐地)不用了.
查看>>
23种设计模式-享元模式
查看>>
5.29
查看>>
[BZOJ1597]土地购买
查看>>
Python目录常用操作
查看>>
Qt笔记——Event
查看>>
leetcode------Merge Two Sorted Lists
查看>>
leetcode------Binary Tree Preorder Traversal
查看>>
使用钩子函数[1]
查看>>
Unity3D-基本导航(NavMesh)功能实现
查看>>
用Windbg解决一个Bug
查看>>
select * from salgrade for update和select * from salgrade for update nowait区别
查看>>
js文档碎片
查看>>
poj2823-Sliding Window
查看>>
C# 中的委托和事件
查看>>
noip2010普及组初赛
查看>>
cocos2d JS 创建实现换行功能的聊天文本 testLable
查看>>
LeetCode(7): Majority Element
查看>>