把帧动画数据缓存在内存里面,供后续使用时直接取用,避免重复加载和构造。

以下是 Lite2D 的实现。

#include"AnimationCache.h"


AnimationCache*AnimationCache::getInstance()
{
	static AnimationCache*ins = nullptr;

	if (ins == nullptr)
	{
		ins = new AnimationCache;
	}
	return ins;

}

AnimationCache::AnimationCache()
{


}



void AnimationCache::addAnimation(const std::string &name, Animation*animation)
{
	_map.insert(std::pair<std::string, Animation*>(name, animation));
	animation->retain();
}



void AnimationCache::removeAllAnimations()
{
	for (const auto&ani : _map)
	{
		ani.second->release();

	}

	_map.clear();
}


void AnimationCache::removeAnimation(const std::string &name)
{
	auto iter = _map.find(name);
	if (iter == _map.end())
	{
		return;
	}
	(*iter).second->release();
	_map.erase(iter);

}



Animation*AnimationCache::getAnimation(const std::string&name)
{

	auto iter = _map.find(name);
	if (iter == _map.end())
	{
		return nullptr;
	}
	return (*iter).second;
}