#ifndef __Demo__Connection__

#define __Demo__Connection__

#include <iostream>

#include "cocos2d.h"

#include "network/HttpClient.h"

USING_NS_CC;

using namespace std;

using namespace cocos2d::network;

class Connection {

public:

  void doHttpRequest(const char* url, const char* requestData, const char* tag, const ccHttpRequestCallback& callback);

  void onHttpRequestImageCompleted(HttpClient *sender, HttpResponse *response);

private:

  //获取请求网络图片资源

  Texture2D* m_pTexture;

};

#endif /* defined__Demo__Connection__*/

#include "Connection.h"/** 编译到Android平台之后注意添加联网权限 **/

void Connection::doHttpRequest(const char* url, const char* requestData, const char* tag, const ccHttpRequestCallback& callback) {

  HttpRequest* request = new HttpRequest();

  request->setUrl(url);

  request->setRequestType(HttpRequest::Type::POST);               //这是回调对象和回调函数

  request->setResponseCallback(callback); request->setTag(tag);     //请求的数据

  if (strlen(requestData) != 0){

    request->setRequestData(requestData, strlen(requestData));

  }

  HttpClient::getInstance()->send(request); //释放内存

  request->release();

}

void Connection::onHttpRequestImageCompleted(HttpClient *sender, HttpResponse *response) {

  if (!response) { return; } // You can get original request type from: response->request->reqType

  const char* tag = response->getHttpRequest()->getTag();

  if (0 != strlen(tag)) {

    log("%s completed", response->getHttpRequest()->getTag());

  }

  if (!response->isSucceed()) {

    log("error buffer: %s", response->getErrorBuffer());   return;

  }

  auto buffer = response->getResponseData();  //create image

  auto image = new Image;

  if (image->initWithImageData((unsigned char*)buffer->data(), buffer->size()))  {

    auto texture = new Texture2D();

    if (texture->initWithImage(image))   {

        //直接使用该纹理创建

      m_pTexture = texture;

      CCLOG("TextTure2D Init Start");

      auto sprite = Sprite::createWithTexture(texture);

      sprite->setPosition(getContentSize() / 2);

      addChild(sprite);

      CCLOG("TextTure2D Init Finished ");

     //把该图片保存到本地

      std::string backData = " ";

      backData.append(buffer->begin(), buffer->end());

      std::string strSavePath = FileUtils::getInstance()->getWritablePath() + StringUtils::format("NetPhoto.png");

      FILE *fp = fopen(strSavePath.c_str(), "wb+");

      fwrite(backData.c_str(), 1, backData.size(), fp);

      fclose(fp);

    }

    texture->release();

   }

  image->release();

}

Cocos2dx使用网络图片的更多相关文章

  1. quick cocos2dx lua 网络图片 下载 自己主动更新

    转载请注明,原文地址:http://blog.csdn.net/dd135373/article/details/46468505 quick coocs2d-x 网络图片下载,自己主动更新纹理,保存 ...

  2. [原创]cocos2dx加载网络图片&异步加载图片

    [动机] 之前看到一款卡牌游戏,当你要看全屏高清卡牌的时候,游戏会单独从网络上下载,本地只存了非高清的,这样可以省点包大小,所以我萌生了实现一个读取网络图片的类. [联想] 之前浏览网页的时候经常看到 ...

  3. 【cocos2d-x 手游研发小技巧(5)获取网络图片缓存并展示】

    今天是年前最后一天上班了,最后一天上班,祝大家马上有各种东西,最后一天也给写一点干货,就是获取网络图片: 经过自己简单封装了一下,实现了获取网络图片,按照比例展示出来,实现方法是cocos2dx - ...

  4. cocos2d-x C++ 获取网络图片缓存并展示

    #ifndef __HttpGetImg__ #define __HttpGetImg__ #include "cocos2d.h" #include "HttpRequ ...

  5. Cocos2d-x利用CCHttpRequest获取网络图片并显示

    利用CCHttpRequest获取网上http地址的图片并缓存到本地生成CCSprite用于显示 //图片结构class imgstruct : public CCObject { public: i ...

  6. cocos2dx lua中异步加载网络图片,可用于显示微信头像

    最近在做一个棋牌项目,脚本语言用的lua,登录需要使用微信登录,用户头像用微信账户的头像,微信接口返回的头像是一个url,那么遇到的一个问题就是如何在lua中异步加载这个头像,先在引擎源码里找了下可能 ...

  7. cocos2d-x CCHttpRequest获取网络图片并显示

    转自:http://www.cnblogs.com/hzj730/p/3178431.html //图片结构 class imgstruct : public CCObject { public: i ...

  8. cocos2d-x lua 使用http(下载图片, POST JSON)

    cocos2d-x lua 使用http(下载图片, POST JSON) version: cocos2d-x 3.6 1.使用http post json与服务器交互 require(" ...

  9. cocos2dx调用浏览器打开网址

    安卓端cocos2dx/platform/android路径下CCApplication.h: virtual void openURL(const char* pszUrl); CCApplicat ...

随机推荐

  1. 5. SQL Server数据库性能监控 - 当前请求

    原文:5. SQL Server数据库性能监控 - 当前请求 对于在线运行的系统,当前数据库性能监控,通常监视以下几点: (1) 是否有阻塞 (Blocking); (2) 是否有等待 (Waitin ...

  2. Visual Studio 2012使用水晶报表Crystal Report

    原文:Visual Studio 2012使用水晶报表Crystal Report SAP在 2013年1月14日 released SAP Crystal Reports,developer ver ...

  3. firefox os 该设备呼叫移动开发

    1)话筒 权限:telephony api:navigator.moztelephony 参考链接:https://wiki.mozilla.org/WebAPI/WebTelephony 2) 扬声 ...

  4. 【Linux 工作经常使用命令 】

    1, 批量杀某个程序 比方某个程序叫  url_info.py, 起了若干个进程 . 高速查杀. 先查看 ps aux | grep url_info.py 确认没问题 ,能够杀,则批量kill ps ...

  5. MVC5入门学习系列④

    添加Model且简单的使用EF 对于EF(EntityFramework)不了解的朋友可以去百度文科或者在园子里搜一些简资源看下,假如和我一样知道EF的概念,那么就知道EF有一个code first的 ...

  6. Windows Server 服务器安全配置

    Windows Server 服务器安全配置 好吧,我标题党了.我只了解一些基本的安全配置.如果你是大湿,请绕道或者给予我严厉的批评让我进步谢谢. 编辑这篇文章用的编辑器编辑的,当我单击查看的时候发现 ...

  7. 利用Readability解决网页正文提取问题

    分享: 利用Readability解决网页正文提取问题   做数据抓取和分析的各位亲们, 有没有遇到下面的难题呢? - 如何从各式各样的网页中提取正文!? 虽然可以用SS为各种网站写脚本做解析, 但是 ...

  8. hdu 2159

    二维背包,dp[i][j]表示忍耐度为i,且还可以杀j个怪时能获得的最大经验值 dp[i][j]=max(dp[i][j],dp[i-r[k]][j-1]+e[k]),r[k]为杀死第k种怪掉的忍耐度 ...

  9. Lazy Scheduler

    Lazy Scheduler:我的轻量级任务调度框架   一.背景 工作中经常涉及任务调度,一直都是采用while(true) => if hitted DO => Thread.Slee ...

  10. iOS使用自定义字体的方法(内置和任意下载ttf\otf\ttc字体文件)

    最近做了个有关阅读的应用,使用了自定义字体,学习了一下这方面的知识. 1.首先是最简单也普遍的做法,打包内置字符库文件: 把字体库文件添加到工程,如font1.ttf添加到工程,然后在工程plist添 ...