Creating Frame Animation in Cocos2d-X 2.0 Using a Sprite Sheet

Saturday, July 28th, 2012

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]

2 comments on “Creating Frame Animation in Cocos2d-X 2.0 Using a Sprite Sheet

  1. Nicson says:

    Good! could be please post how to apply this animation on multiple sprites, like gold coins , collectables ?

    • abe says:

      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.

Leave a Reply to Nicson Cancel reply

Your email address will not be published. Required fields are marked *