【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】
今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片;
经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是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)获取网络图片缓存并展示】的更多相关文章
- 【cocos2d-x 手游研发小技巧(6)聊天系统+字体高亮】
转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-6.html 聊天系统在手机网游中是最常见的交互工具,大家在一起边玩游戏边聊天岂不乐哉: 废话不多了 ...
- 【cocos2d-x 手游研发小技巧(8)通讯的数据压缩与解压 】
今天说一下手机游戏通讯协议中的数据问题,大量的数据将给服务器端和客户端带来很大的压力,一般来说. 转载请注明出处:http://www.cnblogs.com/zisou/p/cocos2dxJQ-8 ...
- 【cocos2d-x 手游研发小技巧(1)自定义制作怪物伤害数值】
直插主题了,今天写了一下午,早就想要写这类似东西的,首先我不会选用CCLabelAtlas了,我直接用帧图片做. 首先我们要准备素材,我先把素材帖出来给大家: 这个是一张比较全的素材图,它包含了扣血的 ...
- 【cocos2d-x 手游研发小技巧(7)图片资源加密,Lua文件加密】
游戏开发中常遇到资源保护的问题. 目前游戏开发中常加密的文件类型有:图片,Lua文件,音频等文件,而其实加密也是一把双刃剑. 需要安全那就得耗费一定的资源去实现它.目前网上也有用TexturePack ...
- 【cocos2d-x 手游研发小技巧(4)与Android混编实现换“头像图片”】
cocos2dx在android平台上的游戏开发中往往会遇到一些混编需求,如: 比方有的社区类游戏需要用到更换玩家的“头像”操作,其实就是调用android servers服务里面的本地图片,以及选取 ...
- 【cocos2d-x 手游研发小技巧(3)Android界面分辨率适配方案】
先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对andr ...
- 【cocos2d-x 手游研发小技巧(2)循环无限滚动的登陆背景】
原创文章,转载请附上链接:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html 首先让大家知道我们想要实现的最终效果是什么样的? 看一个<逆天仙魔 ...
- 【cocos2d-x 手游研发----目录】
感谢大家一直支持我写这样一系列的博客,从中我自己也获益良多,cocos2d-x这样一款非常棒的引擎,是值得我们去学习和分享的,谈到分享,那我就把这套写了差不多一两个月的框架给大家开源下载,写的很一般, ...
- 【cocos2d-x 手游研发----地图活起来了】
谈到地图不少人都说要做地图编辑器了,但是我暂时绕过这一步,如果不用寻路地图就不能移动?寻路就是会绕过障碍物的算法. 我做了一个简单的地图的思想,就是地图分层3层:背景层.可行区域层.遮罩层,但是地图就 ...
随机推荐
- Spring MVC 学习 之 - 配置简单demo
1.环境参数: Maven:3.1.1 JDK :1.6 2.项目文件结构图: 3.各文件配置: 3.1. pom.xml <project xmlns="http://maven. ...
- Angular2中Input和Output
@Input @Input是用来定义模块的输入的,用来让父模块往子模块传递内容: @Output 子模块自定义一些event传递给父模块用@Output. 对于angular2中的Input和Outp ...
- EL 和 JSTL
EL 什么是EL表达式 EL(Express Lanuage) 表达式可以嵌入在jsp页面内部 减少jsp脚本的编写 EL出现的目的是要替代jsp页面中脚本的编写 作用区间 EL最主要的作用是获取四大 ...
- css常用属性总结:关于word-spacing和letter-spacing的使用
前端时间项目版本迭代,修改代码时发现使用了关于word-spacing和letter-spacing.先说下使用场景,以前的项目中,经常遇到某些字符间有一些间距,我看了一些同事的代码是这么实现的: & ...
- istview android:cacheColorHint,android:listSelector属性作用(转)
原文ListView是常用的显示控件,默认背景是和系统窗口一样的透明色,如果给ListView加上背景图片,或者背景颜色时,滚动时listView会黑掉, 原因是,滚动时,列表里面的view重绘时,用 ...
- Marshal.FreeHGlobal 方法 (IntPtr)
释放以前从进程的非托管内存中分配的内存. 命名空间: System.Runtime.InteropServices程序集: mscorlib(位于 mscorlib.dll) 下面的示例演示如何 ...
- [leetcode]301. Remove Invalid Parentheses 去除无效括号
Remove the minimum number of invalid parentheses in order to make the input string valid. Return all ...
- php从数组中取出一段 之 array_slice
array array_slice ( array $array , int $offset [, int $length [, bool $preserve_keys ]] ) array_slic ...
- Java的类名与文件名必须一致
1.Java保存的文件名必须与类名一致:2.如果文件中只有一个类,文件名必须与类名一致:3.一个Java文件中只能有一个public类:4.如果文件中不止一个类,文件名必须与public类名一致:5. ...
- 一些json在js和c++ jsoncpp的操作
1.对于javascript部分,如果将字符串转为json对象? var aa ={ keyword:"zoumm", requestcount:"5", ne ...