SpriteBatchNode is one of the most usefull class of cocos2d-x-3.2
Now here I am creating a
subclass which is extend from SpriteBatchNode
You .h file
#ifndef _ANIMALANIMATION_H_
#define _ANIMALANIMATION_H_
#include "cocos2d.h"
class animalAnimation : public cocos2d::SpriteBatchNode
{
public:
animalAnimation();
~animalAnimation();
static animalAnimation* create(std::string spriteReference,std::string plistname,std::string firstframe,int frames);
void initOptions(std::string plistname,std::string firstframe,int frames);
};
#endif //
Now .cpp file
#include "animalAnimation.h"
using namespace cocos2d;
animalAnimation::animalAnimation() {}
animalAnimation::~animalAnimation() {}
animalAnimation* batch;
animalAnimation* animalAnimation::
create(std::string spriteReference,std::string plistname,std::string firstframe,int frames)
{
batch = new animalAnimation();
if (batch &&
batch->initWithFile(spriteReference,1))
{
batch->autorelease();
batch->initOptions(plistname,firstframe,frames);
return batch;
}
CC_SAFE_DELETE(batch);
return NULL;
}
void animalAnimation::initOptions(std::string plistname,std::string firstframe,int frames)
{
std::string startframe=firstframe;
std::string beginFrame=startframe.append("0001.png");
std::string keyframes=firstframe.append("%04d.png");
SpriteFrameCache* cache = SpriteFrameCache::getInstance();
cache->addSpriteFramesWithFile(plistname);
auto bearSprite = Sprite::createWithSpriteFrameName(startframe);
batch->addChild(bearSprite);
auto body = PhysicsBody::createCircle(bearSprite->getContentSize().width
/2);
body->setRotationEnable(false);
body->setRotationEnable(true);
body->setAngularDamping(0.5f);
bearSprite->setPhysicsBody(body);
Vector<SpriteFrame*> animFrames(17);
char str[100] = {0};
for(int i = 1; i <= frames; i++)
{
sprintf(str, keyframes.c_str(),
i);
SpriteFrame* frame = cache->getSpriteFrameByName(str);
animFrames.pushBack(frame);
}
Animation* animation = Animation::createWithSpriteFrames(animFrames,
0.3f);
bearSprite->runAction( CCSpeed::create(RepeatForever::create( Animate::create(animation) ), 13.5f));
}
//Importing and working with animalAnimation class
// create("nameofursprite.png"," nameofursprite.t.plist","staringframe",numberofframes)
animalAnimation
*animal=animalAnimation::create("newspritesheet.png","newspritesheet.plist","giraffe",11);
//where
p is Vec2(x,y ) position
animal->setPosition(p);
addChild(animal);
Comments
Post a Comment