之前向Andreas Loew申请了一枚TexturePacker注册码,很快都下来了,作为回报我打算还是写一篇关于TexturePacker的使用博客吧,有兴趣的可以在这里申请密钥,http://www.codeandweb.com,前不久他也来信回访过问我使用感觉怎样,因为工作的原因,太忙了,这里我主要介绍下cocos2dx中的动画以及TexturePacker使用。
做动画之前,要准备素材,在demo中的你可以下载:http://pan.baidu.com/share/link?shareid=1419818902&uk=3088193979
打开TexturePacker,
这个相信大家都看得懂,这里选择cocos2d,然后添加文件夹,该工具会自动加载纹理图片,选择打包的纹理图片以及plist输出路径:
各项参数设定完毕,发布,你会在设置的输出路径得到打包好的图片以及一个plist文件;
接下来,介绍下动画的创作:
动画创作有很多中方式,这里我就采用plist方式来创建动画;注意几点 1.精灵帧缓冲;2.精灵帧;3.动画序列容器;ps:再次建议学2dx的话,有精力, 把源码翻来看看,因为我们很多是记不住的 但是原理一定要明白。
这里直接上创建动画步骤,demo代码片段:
1、加载plist到缓冲帧里面,这里通过数组来创建动画帧序列;
2.将精灵帧添加到数组中;
3.创建精灵;
4.创建动画序列帧(注意动画序列容易这里CCSequence用类型),最后回调runAction(CCAction *action);
05 | class role: public CCLayer |
11 | static cocos2d::CCScene* scene(); |
019 | CCSize mysize=CCDirector::sharedDirector()->getWinSize(); |
021 | CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile( "role/role.plist" ); |
025 | CCArray * attackArray=CCArray::create(); |
028 | CCArray * attackArray2=CCArray::create(); |
032 | CCArray * runArray=CCArray::create(); |
035 | CCArray * walkArray=CCArray::create(); |
038 | for ( int index=1;index!=9;++index) |
041 | CCLOG(CCString::createWithFormat( "%s%d.png" , "Img_Zhici" ,index)->getCString()); |
042 | attackArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> |
043 | spriteFrameByName(CCString::createWithFormat( "%s%d.png" , "Img_Zhici" ,index)->getCString())); |
046 | for ( int i=1;i!=17;++i) |
049 | CCLOG(CCString::createWithFormat( "%s%d.png" , "Img_Zhn" ,i)->getCString()); |
050 | attackArray2->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> |
051 | spriteFrameByName(CCString::createWithFormat( "%s%d.png" , "Img_Zhn" ,i)->getCString())); |
054 | for ( int i=1;i!=7;++i) |
056 | CCLOG(CCString::createWithFormat( "%s%d.png" , "Img_ZRun" ,i)->getCString()); |
057 | runArray->addObject(CCSpriteFrameCache::sharedSpriteFrameCache()-> |
058 | spriteFrameByName(CCString::createWithFormat( "%s%d.png" , "Img_ZRun" ,i)->getCString())); |
062 | for ( int i=1;i!=7;++i){ |
063 | CCString::createWithFormat( "%s%d.png" , "Img_Zwlak" ,i)->getCString(); |
064 | walkArray->addObject( |
065 | CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName( |
066 | CCString::createWithFormat( "%s%d.png" , "Img_Zwlak" ,i)->getCString())); |
071 | CCSprite * sp=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray->objectAtIndex(0)); |
072 | sp->setPosition(ccp(mysize.width/4,mysize.height/3)); |
077 | CCSprite * standAttack=CCSprite::createWithSpriteFrame((CCSpriteFrame*)attackArray2->objectAtIndex(0)); |
078 | CCSize visibleSize= CCDirector::sharedDirector()->getVisibleSize(); |
079 | standAttack->setPosition(ccp(visibleSize.width/3,visibleSize.height/3)); |
080 | this ->addChild(standAttack); |
083 | CCSprite *runsprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)runArray->objectAtIndex(0)); |
084 | runsprite->setPosition(ccp(visibleSize.width/2,visibleSize.height/3)); |
085 | this ->addChild(runsprite); |
088 | CCSprite *walkSprite=CCSprite::createWithSpriteFrame((CCSpriteFrame*)walkArray->objectAtIndex(0)); |
089 | walkSprite->setPosition(ccp(visibleSize.width/1.5,visibleSize.height/3)); |
090 | this ->addChild(walkSprite); |
093 | CCAnimation *animation1=CCAnimation::createWithSpriteFrames(attackArray,0.1f); |
094 | CCAnimate *attack1=CCAnimate::create(animation1); |
097 | CCAnimation * standAnimation=CCAnimation::createWithSpriteFrames(attackArray2,0.1f); |
098 | CCAnimate *standAnimate=CCAnimate::create(standAnimation); |
100 | CCAnimation * runAnimation=CCAnimation::createWithSpriteFrames(runArray,0.1f); |
101 | CCAnimate *runAnimate=CCAnimate::create(runAnimation); |
103 | CCAnimation * walkAnimation=CCAnimation::createWithSpriteFrames(walkArray,0.15f); |
104 | CCAnimate *walkAnimate=CCAnimate::create(walkAnimation); |
110 | CCSequence* pse1=CCSequence::create(attack1,NULL); |
111 | CCSequence* pse2=CCSequence::create(standAnimate,NULL); |
112 | CCSequence* pse3=CCSequence::create(runAnimate,NULL); |
113 | CCSequence* pse4=CCSequence::create(walkAnimate,NULL); |
116 | sp->runAction(CCRepeatForever::create(pse1)); |
117 | standAttack->runAction(CCRepeatForever::create(pse2)); |
118 | runsprite->runAction(CCRepeatForever::create(pse3)); |
119 | walkSprite->runAction(CCRepeatForever::create(pse4)); |
121 | CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile( "role/role.plist" ); |
128 | cocos2d::CCScene* role::scene() |
130 | CCScene * scene = NULL; |
133 | scene = CCScene::create(); |
134 | CC_BREAK_IF(! scene); |
135 | role *layer = role::create(); |
136 | CC_BREAK_IF(! layer); |
137 | scene->addChild(layer); |
运行效果如下: