动画 和精灵帧缓存CCSpriteFrameCache 精灵表单CCSpriteBatchNode的使用
2014-05-17 20:53
337 查看
代码片CCSpriteFrameCache.cpp 素材取自熬盟主 跑酷; 准备文件sprite_sheet.plist sprite_sheet.png
CCSpriteBatchNode和CCSpriteFrameCache结合使用;CCSpriteFrameCache和CCSpriteBatchNode加载的是同一纹理贴图
里边传入的纹理图片是子节点用到的纹理图片,我们可以设置好这些子精灵节点的坐标,然后添加到这个node中,这个node再添加到其他的层中,这样就可以批次渲染了。
这个node要求它的字精灵节点和它使用相同的纹理:
//或者使用texture2d初始化,里边传入一个texture
//CCSpriteBatchNode * batch = CCSpriteBatchNode::createWithTexture();
//CCSprite * sprite = CCSprite::createWithTexture(batchNode->getTexture());
那如果纹理不一样怎么办,那就把纹理都打包到一张图片上,用的时候从这张图片上截取,工具可以使用texturepacker。
纹理学习 待续;
//简单帧动画 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。
纹理学习 待续;
相关文章推荐
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
- Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
- Cocos2d-x--使用CCSpriteFrameCache,CCAnimationCache预加载资源
- cocos2d-x 详解之 CCSprite(精灵)- “CCSpriteBatchNode”和“CCSpriteFrameCache”
- cocos2d-x【小菜在学习】如何增加光晕效果以及CCSpriteFrameCache使用
- cocos2d -x 精灵集合CCSpriteBatchNode的使用
- cocos2d-x 详解之 CCSprite(精灵)- “CCSpriteBatchNode”和“CCSpriteFrameCache”
- 如何使用动画和精灵表单 Cocos2d-x 2.1.4
- iphone游戏开发之cocos2d( 十一 )使用CCSpriteBatchNode和纹理图册,提高精灵动画效率;
- Cocos2d-x--使用CCSpriteFrameCache,CCAnimationCache预加载资源
- Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)
- cocos2d - CCSpriteBatchNode的使用
- CCSpriteFrameCache的用法(转)
- cocos2d里面使用精灵表单(spritesheet)的好处
- HTML5 Canvas 教程 2.4.2 使用 requestAnimationFrame 方法创建动画
- CCSpriteFrameCache和CCSpriteBatchNode
- cocos2d-x 动画详解之三CCSpriteFrame
- NGUI研究院之Sprite精灵与精灵动画的使用(二)
- 使用requestAnimationFrame更好的实现javascript动画(kimhou 译)