把帧动画数据缓存在内存里面,供后续使用时直接取用,避免重复加载和构造。
以下是 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;
}