Skip to main content

Creating a SpriteBatchNode subclass for sprite animation


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;
 animalAnimationanimalAnimation:: 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

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...