cocos2dx 动态加载网络图片

本文介绍了一种在Cocos2d-x中通过网络加载图片资源的方法,并提供了一个改进的函数指针定义,使得回调函数能更方便地替换节点显示的图片资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网上很多此类文章,但大多都是片段。

在前辈的基础上,改动了一点点。

主要改变了一个函数指针的定义:

#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


评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值