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

经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是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[] = "";
sprintf(thisnumber, "%d",number);
request->setTag(thisnumber);
CCHttpClient::getInstance()->send(request);
request->release();
} void HttpGetImg::onHttpRequestRptImg(CCHttpClient *sender, CCHttpResponse *response)
{ char c_tag[]= "";
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 ( != strlen(response->getHttpRequest()->getTag()))
{
// CCLog("%s completed", response->getHttpRequest()->getTag());
} if (!response->isSucceed())
{
CCLog("response failed");
CCLog("error buffer: %s", response->getErrorBuffer());
return;
} vector<char> *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,,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

【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】的更多相关文章

  1. 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】

    转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-6.html 聊天系统在手机网游中是最常见的交互工具,大家在一起边玩游戏边聊天岂不乐哉: 废话不多了 ...

  2. 【cocos2d-x 手游研发小技巧(8)通讯的数据压缩与解压 】

    今天说一下手机游戏通讯协议中的数据问题,大量的数据将给服务器端和客户端带来很大的压力,一般来说. 转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-8 ...

  3. 【cocos2d-x 手游研发小技巧(1)自定义制作怪物伤害数值】

    直插主题了,今天写了一下午,早就想要写这类似东西的,首先我不会选用CCLabelAtlas了,我直接用帧图片做. 首先我们要准备素材,我先把素材帖出来给大家: 这个是一张比较全的素材图,它包含了扣血的 ...

  4. 【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】

    游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePack ...

  5. 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】

    cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...

  6. 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】

    先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对andr ...

  7. 【cocos2d-x 手游研发小技巧(2)循环无限滚动的登陆背景】

    原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...

  8. 【cocos2d-x 手游研发----目录】

    感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...

  9. 【cocos2d-x 手游研发----地图活起来了】

    谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...

随机推荐

  1. C#实现图片文件到数据流再到图片文件的转换

    //----引入必要的命名空间using System.IO;using System.Drawing.Imaging; //----代码部分----// private byte[] photo;/ ...

  2. C#串口编程测试收发

    原文:http://www.cnblogs.com/vsdot/archive/2013/04/23/3263348.html   基本传递方法:RS232传输要有1位起始位,8位数据位.1位校验位( ...

  3. 15 并发编程-(IO模型)

    一.IO模型介绍 1.阻塞与非阻塞指的是程序的两种运行状态 阻塞:遇到IO就发生阻塞,程序一旦遇到阻塞操作就会停在原地,并且立刻释放CPU资源 非阻塞(就绪态或运行态):没有遇到IO操作,或者通过某种 ...

  4. Win7+Ubuntu12.04(EasyBCD硬盘安装)

    安装双系统 Windows7 + Ubuntu12.04 软件准备 准备两个东西EasyBCD软件和iso镜像(我用的easybcd是2.2版,就下载1.7之后版就行,要那种安装版的,不要绿色版) E ...

  5. UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题

    UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题? 情形:按钮A挂在主画布上.四方扩充模式.A的中心和画面中心不重合. 这时候用代码设置A.localPosition = new V ...

  6. 在CentOS上安装tomcat

    先从tomcat网站上下载最新的gz安装包 文件名:apache-tomcat-8.0.8.tar.gz 将文件上传到/usr/local目录中 执行解压缩 tar zxvf apache-tomca ...

  7. C# Action

    Action<T> Delegate Encapsulates a method that has a single parameter and does not return a val ...

  8. 19-python 自己建立词库并实现文章汉语词频统计

    首先在网上下载一个汉语词典的txt文件, 汉语词典 1.用正则去掉词语的解释,即提取出所有汉语词语: import re def getHanYuCi(st): p = re.compile(r'[. ...

  9. TLB与内存寻址,内存读取,虚拟内存的相关原理

    TLB(Translation Lookaside Buffer)转换检测缓冲区是一个内存管理单元,用于改进虚拟地址到物理地址转换速度的缓存. TLB是一个小的,虚拟寻址的缓存,其中每一行都保存着一个 ...

  10. Golang之匿名函数和闭包

    Go语言支持匿名函数,即函数可以像普通变量一样被传递或使用. 使用方法如下: main.go package main import ( "fmt" ) func main() { ...