CCAnimationCache(动画存储池addAnimation removeAnimationByName animationByName addAnimationsWithDictionary
来源:互联网 发布:软件融合器 编辑:程序博客网 时间:2024/05/29 14:46
#ifndef __CC_ANIMATION_CACHE_H__
#define __CC_ANIMATION_CACHE_H__
#include "cocoa/CCObject.h"
#include "cocoa/CCDictionary.h"
#include <string>
NS_CC_BEGIN
class CCAnimation;
/**
* @addtogroup sprite_nodes
* @{
*/
/** Singleton that manages the Animations.
It saves in a cache the animations. You should use this class if you want to save your animations in a cache.
Before v0.99.5, the recommend way was to save them on the CCSprite. Since v0.99.5, you should use this class instead.
@since v0.99.5
*/
class CC_DLL CCAnimationCache : public CCObject
{
public:
CCAnimationCache();
~CCAnimationCache();
/** Returns the shared instance of the Animation cache */
static CCAnimationCache*sharedAnimationCache(void); //返回动画存储池单例
/** Purges(清除) the cache. It releases all the CCAnimation objects and the shared instance.
*/
static voidpurgeSharedAnimationCache(void);//清空动画池
/** Adds a CCAnimation with a name.
*/
voidaddAnimation(CCAnimation *animation, const char * name);//往动画池里加动画 参数2是动画名字
/** Deletes a CCAnimation from the cache.
*/
voidremoveAnimationByName(const char* name);//删除动画池中动画 参数是动画名字
/** Returns a CCAnimation that was previously added.
If the name is not found it will return nil.
You should retain the returned copy if you are going to use it.
*/
CCAnimation*animationByName(const char* name);// 返回一个动画 参数是动画名字 使用前必须对返回的动画retain
/** Adds an animation from an NSDictionary
Make sure that the frames were previously loaded in the CCSpriteFrameCache.
@since v1.1
*/
voidaddAnimationsWithDictionary(CCDictionary* dictionary);//根据字典 创建动画并放入动画池 字典保存若干个 动画所需帧和动画名
{
CCDictionary* animations = (CCDictionary*)dictionary->objectForKey("animations");
if ( animations == NULL ) {
CCLOG("cocos2d: CCAnimationCache: No animations were found in provided dictionary.");
return;
}
unsigned int version = 1;
CCDictionary* properties = (CCDictionary*)dictionary->objectForKey("properties");
if( properties )
{
version = properties->valueForKey("format")->intValue();
CCArray* spritesheets = (CCArray*)properties->objectForKey("spritesheets");
CCObject* pObj = NULL;
CCARRAY_FOREACH(spritesheets, pObj)
{
CCString* name = (CCString*)(pObj);
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(name->getCString());
}
}
switch (version) {
case 1:
parseVersion1(animations);
break;
case 2:
parseVersion2(animations);
break;
default:
CCAssert(false, "Invalid animation format");
}
}
/////////////////////////
-(void)addAnimationsWithDiction
根据一个字典创建CCAnimation对象,并存入内存池。字典中保存的是每个动画的名字,动画中包含哪些帧,换帧间隔是多长。
-(void)addAnimationsWithFile:(NSString *)plist
根据一个plist文件创建CCAnimation对象,并存入内存池。先用文件中的信息生成一个字典,再调用addAnimationsWithDiction
/** Adds an animation from a plist file.
Make sure that the frames were previously loaded in the CCSpriteFrameCache.
@since v1.1
*/
void addAnimationsWithFile(const char* plist);
{
CCAssert( plist, "Invalid texture file name");
std::string path = CCFileUtils::sharedFileUtils()->fullPathForFilename(plist);//根据文件名得到文件路径
CCDictionary* dict = CCDictionary::createWithContentsOfFile(path.c_str()); //根据文件路径找到文件 打开创建字典
CCAssert( dict, "CCAnimationCache: File could not be found");
addAnimationsWithDictionary(dict);
}
bool init(void);
private:
void parseVersion1(CCDictionary* animations);
{
CCSpriteFrameCache *frameCache = CCSpriteFrameCache::sharedSpriteFrameCache();
CCDictElement* pElement = NULL;
CCDICT_FOREACH(animations, pElement)
{
CCDictionary* animationDict = (CCDictionary*)pElement->getObject();
CCArray* frameNames = (CCArray*)animationDict->objectForKey("frames");
float delay = animationDict->valueForKey("delay")->floatValue();
CCAnimation* animation = NULL;
if ( frameNames == NULL )
{
CCLOG("cocos2d: CCAnimationCache: Animation '%s' found in dictionary without any frames - cannot add to animation cache.", pElement->getStrKey());
continue;
}
CCArray* frames = CCArray::createWithCapacity(frameNames->count());
frames->retain();
CCObject* pObj = NULL;
CCARRAY_FOREACH(frameNames, pObj)
{
const char* frameName = ((CCString*)pObj)->getCString();
CCSpriteFrame* spriteFrame = frameCache->spriteFrameByName(frameName);
if ( ! spriteFrame ) {
CCLOG("cocos2d: CCAnimationCache: Animation '%s' refers to frame '%s' which is not currently in the CCSpriteFrameCache. This frame will not be added to the animation.", pElement->getStrKey(), frameName);
continue;
}
CCAnimationFrame* animFrame = new CCAnimationFrame();
animFrame->initWithSpriteFrame(spriteFrame, 1, NULL);
frames->addObject(animFrame);
animFrame->release();
}
if ( frames->count() == 0 ) {
CCLOG("cocos2d: CCAnimationCache: None of the frames for animation '%s' were found in the CCSpriteFrameCache. Animation is not being added to the Animation Cache.", pElement->getStrKey());
continue;
} else if ( frames->count() != frameNames->count() ) {
CCLOG("cocos2d: CCAnimationCache: An animation in your dictionary refers to a frame which is not in the CCSpriteFrameCache. Some or all of the frames for the animation '%s' may be missing.", pElement->getStrKey());
}
animation = CCAnimation::create(frames, delay, 1);
CCAnimationCache::sharedAnimationCache()->addAnimation(animation, pElement->getStrKey());
frames->release();
}
}
void parseVersion2(CCDictionary* animations);
private:
CCDictionary* m_pAnimations;
static CCAnimationCache* s_pSharedAnimationCache;
};
// end of sprite_nodes group
/// @}
NS_CC_END
#endif // __CC_ANIMATION_CACHE_H__
- CCAnimationCache(动画存储池addAnimation removeAnimationByName animationByName addAnimationsWithDictionary
- 动态增加view 的动画 AnimationSet.addAnimation
- 实现图片转圈的动画layer addAnimation
- cocos2d-x 动画缓存CCAnimationCache
- CCAnimationCache
- CCAnimationCache
- 缓存与预加载技术(图片缓存CCSpriteFrameCache、动画缓存 CCAnimationCache、纹理缓存CCTextureCache、音乐音效SimpleAudioEngine)
- cocos2dxz之CCAnimationCache
- cocos2dxz之CCAnimationCache
- CCActionTween,CCAnimationCache源码分析
- cocos2dx 源码学习2 CCAnimationCache
- cocos2d-X 节点(CCAnimationCache.h)API
- cocos2d-x中的缓存CCTextureCache、CCSPriteFrameCache、CCAnimationCache
- 【cocos2dx之CCAnimation、CCAnimate、CCAnimationCache使用】
- cocos2d-x中的缓存CCTextureCache、CCSPriteFrameCache、CCAnimationCache
- Cocos2d-x--使用CCSpriteFrameCache,CCAnimationCache预加载资源
- Cocos2d-x--使用CCSpriteFrameCache,CCAnimationCache预加载资源
- 场景切换时清理缓存!!CCTextureCache、CCSpriteFrameCache、CCAnimationCache
- CCSprite
- 优盘安装Windows 7、8系统
- <菜鸟学算法-A排序(shell排序)>
- 1.3 Debugging of Shaders (调试着色器)
- 一次心惊肉跳的服务器误删文件的恢复过程
- CCAnimationCache(动画存储池addAnimation removeAnimationByName animationByName addAnimationsWithDictionary
- Tweak the Dock
- lua的简单对象实现以及简单继承
- POJ1088
- 【Android】Handler机制源码详解(一)
- CCAnimation(CCAnimationFrame:m_fDelayUnits m_pUserInfo。 CCAnimation:)
- <菜鸟学算法-A排序(选择排序)>
- 读书心得
- 【大话设计模式】——简单工厂模式