大渣好,我是nullptr,请教一个资源缓存问题。

我的需求:
程序需要读取大量的图片资源,大概每次3000张左右。都是一些很小的图片50x50左右吧,然后我希望用缓存去储存这些图片的资源。
我的疑问:
那么问题来了,我应该缓存:
1,缓存Texture2D纹理
2,缓存spriteFrame呢。

Texture2D会自动缓存加载的每一张图片到内存的。
用Sprite加载也会调用Texture2D自动缓存。
缓存到内存应该不是优化重点

Director::getInstance()->getTextureCache()->addImage(filename);
1赞

哦,我大概明白了,就是不管是纹理还是精灵,他都会自动帮忙缓存一个getTextureCache()

本质都是texture

1赞

行,谢谢!!

3000张50x50的小图,不做处理的话得加载好一会儿。
建议你把这些小图打成若干张合图即(xxx.png+xxx.plist 形式)

加载

//1.加载合图进缓存 plistPath  后缀为.plist
SpriteFrameCache::getInstance()->addSpriteFramesWithFile(plistPath);

//2.异步加载进缓存 filePath 后缀为.png 或.jpg
Director::getInstance()->getTextureCache()->addImageAsync(filePath, [](Texture2D* texture) {
	std::string plistPath = texture->getPath();
	int pos = plistPath.find_last_of(".");
	plistPath.resize(pos);
	plistPath.append(".plist");
	SpriteFrameCache::getInstance()->addSpriteFramesWithFile(plistPath);
});

使用

//1.获取缓存的SpriteFrame
 SpriteFrame *frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(spriteFrameName);

//2.创建精灵
Sprite* sprite = Sprite::createWithSpriteFrameName(spriteFrameName)

感谢大佬赐教! :face_with_monocle: 感觉对我帮助很大