渲染框架的使用

四、精灵帧类(CCSpriteFrame


      精灵帧的概念是相对于动画而产生的。一个精灵时固定的节点,它可以拥有许多精灵帧(CCSpriteFrame),在

它们之间切换就形成了动画。CCSpriteFrame类的继承关系如下图所示。

      

   

      CCSpriteFrame类通过贴图定义,也可以是贴图的一部分,可以通过精灵的setDisplayFrame函数来设置当前显示

的精灵帧。它的主要函数如下图所示。



1、示例讲解


      让我们来看看精灵帧类的使用方法。首先是创建精灵帧类,如下代码所示,出自tests项目中SpriteTest目录下

SpriteTest.cpp文件中SpriteAnimationSplit类中的构造函数。

[cpp]  view plain copy
  1. CCSpriteFrame *frame0 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*0, 132*0, 132, 132));  
  2. CCSpriteFrame *frame1 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*1, 132*0, 132, 132));  
  3. CCSpriteFrame *frame2 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*2, 132*0, 132, 132));  
  4. CCSpriteFrame *frame3 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*3, 132*0, 132, 132));  
  5. CCSpriteFrame *frame4 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*0, 132*1, 132, 132));  
  6. CCSpriteFrame *frame5 = CCSpriteFrame::createWithTexture(texture, CCRectMake(132*1, 132*1, 132, 132));  
     函数通过create函数创建,并用第0帧创建精灵类。删除无用的精灵帧如下代码所示,出自SpriteAnimationSplit类

的onExit函数。

[cpp]  view plain copy
  1. void SpriteAnimationSplit::onExit()  
  2. {  
  3.     SpriteTestDemo::onExit();  
  4.     CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames();  
  5. }  
     获得精灵帧缓存单例,并调用removeUnusedSpriteFrames就可以删除无用的精灵帧。


2、tests示例运行效果图。





五、精灵帧缓存类(CCSpriteFrameCache


       精灵帧缓存类CCSpriteFrameCache用来存储精灵帧,提前缓存起来有助于提高程序的效率。

CCSpriteFrameCache是一个单例模式,不属于某个精灵,是所有精灵共享使用的。


CCSpriteFrameCache类的继承关系如下图所示。



CCSpriteFrameCache类的主要函数如下图所示。




1、示例讲解


      如下代码是定义和使用CCSpriteFrameCache类的函数,出自tests项目,SpriteTest目录下SpriteTest.cpp文件中

的SpriteFrameTest类中的onEnter函数。

[cpp]  view plain copy
  1. //     CCSpriteFrameCache::sharedSpriteFrameCache()->removeUnusedSpriteFrames);  
  2.   CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();  
  3.   cache->addSpriteFramesWithFile("animations/grossini.plist");  
  4.   cache->addSpriteFramesWithFile("animations/grossini_gray.plist""animations/grossini_gray.png");  
  5.   cache->addSpriteFramesWithFile("animations/grossini_blue.plist""animations/grossini_blue.png");  
  6.   
  7.   //  
  8.   // Animation using Sprite BatchNode  
  9.   //  
  10.   m_pSprite1 = CCSprite::createWithSpriteFrameName("grossini_dance_01.png");  
  11.   m_pSprite1->setPosition( ccp( s.width/2-80, s.height/2) );  
  12.   
  13.   CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("animations/grossini.png");  
  14.   spritebatch->addChild(m_pSprite1);  
  15.   addChild(spritebatch);  
  16.   
  17.   CCArray* animFrames = CCArray::createWithCapacity(15);  
  18.   
  19.   char str[100] = {0};  
  20.   for(int i = 1; i < 15; i++)   
  21.   {  
  22.       sprintf(str, "grossini_dance_%02d.png", i);  
  23.       CCSpriteFrame* frame = cache->spriteFrameByName( str );  
  24.       animFrames->addObject(frame);  
  25.   }  
 首先是通过贴图集的plist文件和图的路径传入addSpriteFramesWithFile函数定义,然后通过spriteFrameByName传入

的图片名称获得精灵帧缓存类CCSpriteFrameCache对象。要在onExit函数中删除这些精灵帧缓存,如下代码所示。

[cpp]  view plain copy
  1. void SpriteFrameTest::onExit()  
  2. {  
  3.     SpriteTestDemo::onExit();  
  4.     CCSpriteFrameCache *cache = CCSpriteFrameCache::sharedSpriteFrameCache();  
  5.     cache->removeSpriteFramesFromFile("animations/grossini.plist");  
  6.     cache->removeSpriteFramesFromFile("animations/grossini_gray.plist");  
  7.     cache->removeSpriteFramesFromFile("animations/grossini_blue.plist");  
  8. }  
调用removeSpriteFramesFromFile删除即可。


2、示例运行效果图




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值