Archive for July, 2012
Creating Frame Animation in Cocos2d-X 2.0 Using a Sprite Sheet
Saturday, July 28th, 2012Since 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]
Posted in android, cocos2d-X, cocos2dx, cpp, Games Development, iOS, iPhone, Mobile, plist | 2 Comments
Create Cocos2d-X 2.0 Sprite Sheet
Sunday, July 22nd, 2012Cocos2dx is the C++ implementation of Cocos2d. Even though it is C++ and cross platform it still uses plists. There are probably a lot of tools out there that can help you create these sprite sheets. I am currently using SpriteHelper which has export settings specifically targeting Cocos2D-X. I used to use Texture Packer for Cocos2D because it has a nice PVR viewer.
The main reason i am using SpriteHelper is because of Level Helper. Level Helper looks like it has a lot of potential.
Posted in cocos2d, cocos2d-X, cocos2dx, cpp, Games, Games Development, iOS, iPhone, Mobile | 1 Comment