动画 和精灵帧缓存CCSpriteFrameCache 精灵表单CCSpriteBatchNode的使用

代码片CCSpriteFrameCache.cpp 素材取自熬盟主 跑酷; 准备文件sprite_sheet.plist sprite_sheet.png
	//简单帧动画
	 mainsprite = CCSprite::create("s_1.png");

    CCAnimation * animation = CCAnimation::create();
    animation->addSpriteFrameWithFileName("s_1.png");
    animation->addSpriteFrameWithFileName("s_2.png");
    animation->addSpriteFrameWithFileName("s_3.png");
    animation->addSpriteFrameWithFileName("s_4.png");
    animation->addSpriteFrameWithFileName("s_5.png");
    animation->addSpriteFrameWithFileName("s_6.png");
    animation->setDelayPerUnit(0.1f);
    animation->setRestoreOriginalFrame(true);
    //运行奔跑动画
    mainsprite->runAction(CCRepeatForever::create(CCAnimate::create(animation)));
	mainsprite->setAnchorPoint(ccp(0.5f,0.5f));
	mainsprite->setPosition(ccp(240,160));
	addChild(mainsprite);
bool HelloWorld::init()
{
    bool bRet = false;
    do 
    {
        CC_BREAK_IF(!CCLayer::init());
        
        //获取屏幕大小
		CCSize _screenSize = CCDirector::sharedDirector()->getWinSize();
    
   	//CCSpriteFrameCache(精灵帧缓存)主要用来存放CCSpriteFrame,它没有提供特别的属性,而是提供一系列用于管理CCSpriteFrame的方法
   	//1) 缓存精灵帧和纹理。调用CCSpriteFrameCache的addSpriteFramesWithFile方法,传入生成的属性列表文件plist名称。
      //这里会根据设定的资源搜索路径来自动寻找正确的文件。
    CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("sprite_sheet.plist");
    
    //2)创建一个精灵批处理节点。创建CCSpriteBatchNode对象,传入了精灵表单图像名称。
      //任何时候创建来自这个精灵表单的精灵,都应当将这个精灵添加到这个CCSpriteBatchNode对象里。
    gameBatchNode = CCSpriteBatchNode::create("sprite_sheet.png", 200);
    this->addChild(gameBatchNode, 1);
		//加入一个竞技团队
    CCSprite* jam = CCSprite::createWithSpriteFrameName("jam_1.png");
    //3)创建动画对象。
    CCAnimation* animation = CCAnimation::create();;
    //4)采集帧列表。
    CCSpriteFrame * frame;
    int i;
    for(i = 1; i <= 3; i++) {
        char szName[100] = {0};
        sprintf(szName, "jam_%i.png", i);
        frame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(szName);
        animation->addSpriteFrame(frame);
    }
      //帧动画属性
    animation->setDelayPerUnit(0.2f / 3.0f);
    animation->setRestoreOriginalFrame(false);
    animation->setLoops(-1);
    //5)创建动画和运行动画动作
    CCAction* jamAnimate = CCAnimate::create(animation);
    jamAnimate->retain();
    gameBatchNode->addChild(jam, 0);
	jam->runAction(CCRepeatForever::create(CCAnimate::create(animation)));
    jam->setPosition(ccp(_screenSize.width * 0.19f, _screenSize.height * 0.47f));
    
    bRet=true;
    } while (0);
    return bRet;
}
CCSpriteBatchNode和CCSpriteFrameCache结合使用; CCSpriteFrameCache和CCSpriteBatchNode加载的是同一纹理贴图 
里边传入的纹理图片是子节点用到的纹理图片,我们可以设置好这些子精灵节点的坐标,然后添加到这个node中,这个node再添加到其他的层中,这样就可以批次渲染了。
这个node要求它的字精灵节点和它使用相同的纹理:
//或者使用texture2d初始化,里边传入一个texture
//CCSpriteBatchNode * batch = CCSpriteBatchNode::createWithTexture();
//CCSprite * sprite = CCSprite::createWithTexture(batchNode->getTexture());
那如果纹理不一样怎么办, 那就把纹理都打包到一张图片上 ,用的时候从这张图片上截取,工具可以使用texturepacker。

纹理学习 待续;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值