#ifndef NMBirdParallax_hpp
#define NMBirdParallax_hpp
#include "cocos2d.h"
#include "Box2D/Box2D.h"
using namespace cocos2d;
using namespace std;
class NMBirdParallax: public cocos2d::Node
{
public:
// Constructor private to make misuse of this class difficult.
// Destructor declared and defined here.
CREATE_FUNC(NMBirdParallax);
virtual bool init();
void drawParallax(vector<string> &backgrounds,float distanceBetween,float Speed);
void onEnter();
void onExit();
NMBirdParallax(); // Constructor declared but defined in the cpp file.
~NMBirdParallax(){}
void update(float dt);
private:
float movingVelocity;
unsigned long numberofBgs;
/*
__block NSMutableArray *_backgrounds;
NSInteger _numberOfImagesForBackground;
NSTimeInterval _lastUpdateTime;
NSTimeInterval _deltaTime;
float _pointsPerSecondSpeed;
BOOL _randomizeDuringRollover;
float _min,_max;
*/
//add background sprites which can be same or different
Vector<Sprite*> backgroundArray;
float _max=0;
int totalBackgrounds;
CC_SYNTHESIZE(float, boundWidth, BoundWidth);
CC_SYNTHESIZE(float, boundHeight, BoundHeight);
};
#endif /* NMBirdParallax_hpp */
//cpp file
//11110
#include "NMBirdParallax.hpp"
NMBirdParallax::NMBirdParallax()
{
}
bool NMBirdParallax::init()
{
if (!Node::init()) return false;
return true;
}
//void draw parallax
void NMBirdParallax::drawParallax(vector<string> &backgrounds,float distanceBetween,float Speed)
{
numberofBgs=backgrounds.size();
movingVelocity=Speed;
int index=-1;
for (auto pname: backgrounds)
{
index++;
Sprite *parallaxPart=Sprite::createWithSpriteFrameName(pname);
parallaxPart->setPosition(((parallaxPart->getContentSize().width+distanceBetween)*index),0);
addChild(parallaxPart);
backgroundArray.pushBack(parallaxPart);
_max+=parallaxPart->getContentSize().width;
if(index==0)
{
setBoundWidth(parallaxPart->getContentSize().width);
setBoundHeight(parallaxPart->getContentSize().height);
}
}
}
//
void NMBirdParallax::update(float dt)
{
for (auto parallaxPart: backgroundArray)
{
parallaxPart->setPositionX(parallaxPart->getPositionX()+(dt*movingVelocity));
if(parallaxPart->convertToWorldSpace(parallaxPart->getPosition()).x<-(parallaxPart->getContentSize().width+parallaxPart->getContentSize().width/2))
{
parallaxPart->setPositionX(parallaxPart->getPositionX()+_max);
}
}
}
//on enter sprite
void NMBirdParallax::onEnter()
{
Node::onEnter();
}
//onexit sprite
void NMBirdParallax::onExit()
{
Node::onExit();
}
how to use it
create a instance of NMBirdParallax class
//draw main background
vector<string> allbg;
allbg.push_back("part1.png");
allbg.push_back("part2.png");
allbg.push_back("part3.png");
allbg.push_back("part4.png");
allbg.push_back("part1.png");
Parallax=NMBirdParallax::create();
//right background
Parallax->drawParallax(allbg, 0, -50);
Parallax->setPosition(origin.x-Parallax->getBoundWidth()/2,origin.y+Parallax->getBoundHeight()/2);
Parallax->setVisible(false);
this->addChild(Parallax);
//move parallax inside your update function enjoy!
if(Parallax!=nullptr)
{
Parallax->update(dt);
}
Comments
Post a Comment