求助 cocos2d-x 遇到一个奇怪的问题

woof_1128 2013-09-28 10:09:07
自己定义的一个精灵类在游戏界面实例化了三个对象最后分别调用每个对象的schedule方法来是精灵运动问题是只有最后一个对象的可以运动起来 自定义类.h文件

#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


自定义类.cpp文件

#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();


高手帮帮忙看看是什么问题那?在线等,急急急!!!!
...全文
72 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧