网上很多此类文章,但大多都是片段。
在前辈的基础上,改动了一点点。
主要改变了一个函数指针的定义:
#ifndef __CCIMAGENOTIFICATION_CENTER_H__
#define __CCIMAGENOTIFICATION_CENTER_H__
#include "cocos2d.h"
USING_NS_CC;
typedef void (CCObject::*SEL_FrameNotification)(CCNode* , CCSpriteFrame*);
#define framecallfunc_selector(_SELECTOR) (SEL_FrameNotification)(&_SELECTOR)
回调一个sourceNode和获取网络资源的CCSpriteFrame,在回调中直接setDisplayFrame替换从网络下载的资源,如果下载失败则返回的CCSpriteFrame为空,不用替换。
避免在下载网络图片资源设置souceNode,减少代码的耦合性。感觉更好使用写。
随便在百度查看一张图片,右键图片点击【查看图像】复制网址,我这里找了一张:
http://g.hiphotos.baidu.com/image/pic/item/d788d43f8794a4c2634063b90cf41bd5ac6e39c4.jpg
调用实例:
const char* url_item = "http://st1.tingall.com/UserData/HeadPics/465247/0.jpg36x36.jpg";
CCImageDownloader* item = CCImageDownloader::create();
item->SendHttpRequest(this, framecallfunc_selector(LoginLayer::testImageDownLoad), url_item, sourceSprite, "item.jpg");
回调
void LoginLayer::testImageDownLoad(CCNode* srcNode, CCSpriteFrame* downFrame)
{
CCLOG("testImageDownLoad");
if (srcNode == NULL || downFrame == NULL) return;
CCSprite* srcSprite = (CCSprite*)srcNode;
CCSize srcSize = srcSprite->getContentSize();
srcSprite->setDisplayFrame(downFrame);
CCSize curSize = srcSprite->getContentSize();
float scaleX = srcSize.width / curSize.width;
float scaleY = srcSize.height / curSize.height;
srcSprite->setScaleX(scaleX);
srcSprite->setScaleY(scaleY);
}
Class下载地址:class