zoukankan      html  css  js  c++  java
  • Cocos2dx使用网络图片

    #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();

    }

    安卓环境需要添加相应权限:

    android:name="android.permission.INERNET"/>

  • 相关阅读:
    菜鸟版JAVA设计模式—从买房子看代理模式
    NTP工作机制及时间同步的方法
    Java工厂模式
    圣魔大战3(Castle Fantisia)艾伦希亚战记完美攻略
    对javabean的内省操作
    插入排序(insertion sort)
    中英文对照 —— 十二星座
    中英文对照 —— 十二星座
    数学归纳法的相关证明
    数学归纳法的相关证明
  • 原文地址:https://www.cnblogs.com/liugangBlog/p/6285573.html
Copyright © 2011-2022 走看看