Since the Cocos2d-X 2.0 rc2 a lot of the initialisation has changed so this code works in Cocos2d-X 2.0.
First create a sprite sheet so we can load it in.
Once you have created the Sprite Sheet you will end up with a image file and plist.
mySprites.png
mySprites.plist
I like to name my sprites like this:
jumpAnimation_00
jumpAnimation_01
jumpAnimation_02
jumpAnimation_03
jumpAnimation_04
jumpAnimation_05
walkAnimations_00
walkAnimations_01
walkAnimations_02
walkAnimations_03
walkAnimations_04
walkAnimations_05
It makes creating the animations easier. My code below is depended on the above naming convention.
[cpp]
void creatAnimation()
{
//load plist and it will load in the png with the same name
//the frames will be stored in the CCSpriteFrameCache so you can get the frames at you leisure
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile(“mySprites.plist”);
//the frames will be gathered in the animation object
CCAnimation* jumpAnim = animationName(“jumpAnimations”);
jumpAnim->setDelayPerUnit(0.2);
//create sprite first frame from animation first frame
CCSprite *jumpSprite = CCSprite::create((CCSpriteFrame*) jumpAnim->getFrames()->objectAtIndex(0));
CCAction *jumpAct = CCRepeatForever::create(jumpAnim);
jumpSprite->runAction(jumpAct);
this->addChild(spriteAnim);
}
//this method loops through the CCSpriteFrameCache to get the
CCAnimation *animationName(char const *name)
{
//creates a temp animation object
CCAnimation* holderAnim = CCAnimation::create();
//variables used for the loop
string fName;
string tName = name;
CCSpriteFrame* pFrame;
int frameCount = 1;
//loops till it can’t find any more frames
do
{
//adds the underscore and a zero if the image is less than 10
fName = (frameCount < 10) ? tName + "_0" : tName + "_";
//adds the image number---Utils::num2str() converts an integer to a string
fName = fName + Utils::num2str(frameCount);
frameCount++; //tries to get the frame
//tries to get the frame
pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fName.c_str());
//adds the frame to the animation holder
if (pFrame)
holderAnim->addSpriteFrame(pFrame);
//continues too loop till the next frame is null
} while(pFrame != NULL);
return holderAnim;
}
[/cpp]
Good! could be please post how to apply this animation on multiple sprites, like gold coins , collectables ?
Since the sprite is a pointer you would need to create a class that generates a new instance when requested. When I have some time I will knock out a post with an example.