64,646
社区成员
发帖
与我相关
我的任务
分享
#ifndef __Test__CustomSprite__
#define __Test__CustomSprite__
#include "cocos2d.h"
USING_NS_CC;
#include "SimpleAudioEngine.h"
class CustomSprite : public cocos2d::CCSprite
{
public:
int iIndex;
CustomSprite(void);
~CustomSprite(void);
static CustomSprite* create(const char* downImageName, const char* upImageName);
bool init(const char* downImageName, const char* upImageName);
void initData(const char* downImageName, const char* upImageName);
void setSpritepositionTest(cocos2d::CCSprite* sp1,cocos2d::CCSprite* sp2);
int GetRndNumber(int iMin,int iMax);
void myUpdate(float dt);
void Excutefun();
void StopExec();
void delayFun();
int ComputeHeight(cocos2d::CCSprite* sp1,cocos2d::CCSprite* sp2);
};
#endif
#include "CustomSprite.h"
#include <cocos2d.h>
#include <math.h>
CCSprite* downSp;
CCSprite* upSp;
int iRate;
CustomSprite::CustomSprite(void)
{
}
CustomSprite::~CustomSprite(void)
{
}
CustomSprite* CustomSprite::create(const char* downImageName, const char* upImageName)
{
CustomSprite* pSprite = new CustomSprite();
if (pSprite && pSprite->init(downImageName, upImageName))
{
pSprite->autorelease();
return pSprite;
}
CC_SAFE_DELETE(pSprite);
return NULL;
}
bool CustomSprite::init(const char* downImageName, const char* upImageName)
{
if (!CCSprite::init())
{
return false;
}
iIndex=1;
initData(downImageName, upImageName);
return true;
}
void CustomSprite::initData(const char* downImageName, const char* upImageName)
{
downSp = CCSprite::create(downImageName);
downSp->setPosition(ccp(0,0));
addChild(downSp);
upSp = CCSprite::create(upImageName);
upSp->setPosition(ccp(0,1598));
addChild(upSp);
}
void CustomSprite::setSpritepositionTest(cocos2d::CCSprite* sp1,cocos2d::CCSprite* sp2)
{
float yy=sp1->getPositionY();
float yy21=sp2->getPositionY();
float wgyy=538/2.0+500;
float wgheight=538;
float fpheight=1598;
yy-=iRate;
yy21-=iRate;
sp1->setPosition(ccp(sp1->getPositionX(), yy));
sp2->setPosition(ccp(sp1->getPositionX(), yy21));
float cH=yy+1598/2.0;
float cH2=yy21+1598/2.0;
if(cH<=-wgyy)
{
sp1->setPosition(ccp(sp1->getPositionX(), yy21+1598));
}
if(cH2<=-wgyy)
{
sp2->setPosition(ccp(sp1->getPositionX(), yy+1598));
}
}
void CustomSprite::myUpdate(float dt)
{
setSpritepositionTest(downSp,upSp);
//int ii = ComputeHeight(downSp,upSp);
}
int CustomSprite::ComputeHeight(cocos2d::CCSprite* sp1,cocos2d::CCSprite* sp2)
{
float yy=0.0;//精灵1y坐标
float yy21=0.0;//精灵2y坐标
float h1=0.0;
float h2=0.0;
int picIndex = 0;
yy=sp1->getPositionY();
yy21=sp2->getPositionY();
h1= abs(yy);
h2=abs(yy21);
if(h1<h2)
{
h1+=1598/2.0;
picIndex= floor(h1/178);
float myy=picIndex*178-89-1598/2;
sp1->setPosition(ccp(sp1->getPositionX(),myy));
sp2->setPosition(ccp(sp2->getPositionX(),sp2->getPositionY()+(myy-yy)));
}
else
{
h2+=1598/2;
picIndex= floor(h2/178);
float myy=picIndex*178-89-1598/2;
sp2->setPosition(ccp(sp2->getPositionX(),myy));
sp1->setPosition(ccp(sp1->getPositionX(),sp1->getPositionY()+(myy-yy21)));
}
return picIndex;
}
int CustomSprite::GetRndNumber(int iMin,int iMax)
{
int iRet ;
// "close" menu item clicked
srand((unsigned)time( NULL ));
/*总结来说,可以表示为:a + rand() % n a为最小值,n为最大值+1 */
iRet = iMin+rand()%(iMax+1);
return iRet;
}
void CustomSprite::Excutefun()
{
downSp->setPosition(ccp(0,0));
upSp->setPosition(ccp(0,1598));
iRate = GetRndNumber(0,50);
this->schedule(schedule_selector(CustomSprite::myUpdate),1/60);
delayFun();
}
void CustomSprite::StopExec()
{
this->unschedule(schedule_selector(CustomSprite::myUpdate));
iIndex=CustomSprite::ComputeHeight(downSp,upSp);
}
void CustomSprite::delayFun()
{
CCActionInterval* ac;
ac=(CCActionInterval*)CCSequence::create(
CCDelayTime::create(3),
CCCallFunc::create(this, callfunc_selector(CustomSprite::StopExec)),
NULL);
this->runAction(ac);
}
cs=CustomSprite::create("fpai.png","fpai.png");
cssecond=CustomSprite::create("fpai.png","fpai.png");
csthird=CustomSprite::create("fpai.png","fpai.png");
cs->Excutefun();
cssecond->Excutefun();
csthird->Excutefun();