本文转载于:http://www.cnblogs.com/zisou/p/cocos2d-xARPG6.html
首先让大家知道我们想要实现的最终效果是什么样的?
看一个《逆天仙魔录》例子图:
就是一个连贯循环的背景图,如何让他无间隔的循环连贯跑起来,这里我们利用了定时器schedule方法;
定时器功能有无限循环的功能,那么我们运用这个功能主要是拿来循环刷帧的!
我们先准备一下效果图,如下:
这个背景图够长吧?而且它两边已经被我们的美工做成可循环连接的了,所以我们只需要程序把它循环起来。
具体代码如下:
制造背景的方法
void LoginScenes::makebd(float num,int w,int tag) { float x,y; CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCSize size = CCDirector::sharedDirector()->getWinSize(); x = size.width; y = size.height+origin.y; CCSprite *background=CCSprite::create(p_loginallbd); background->setAnchorPoint(CCPoint(0,0.5)); background->setPosition(CCPoint(background->getContentSize().width*num+w,y/2)); this->addChild(background,tag,tag); }
循环背景的方法
void LoginScenes::movebd(float times) { float x,y; CCPoint origin = CCDirector::sharedDirector()->getVisibleOrigin(); CCSize size = CCDirector::sharedDirector()->getWinSize(); x = size.width; y = size.height+origin.y; CCNode *bg1=CCNode::getChildByTag(99); CCSprite *sp1=(CCSprite*)bg1; CCNode *bg2=CCNode::getChildByTag(98); CCSprite *sp2=(CCSprite*)bg2; sp1->setPosition(CCPoint(sp1->getPositionX()-0.5,sp1->getPositionY())); sp2->setPosition(CCPoint(sp2->getPositionX()-0.5,sp2->getPositionY())); if(sp1->getPositionX()<=-sp1->getContentSize().width) { sp1->setPosition(CCPoint(sp1->getContentSize().width,y/2)); } if(sp2->getPositionX()<=-sp2->getContentSize().width) { sp2->setPosition(CCPoint(sp2->getContentSize().width,y/2)); } }
ok,以上两个函数就能完成,就差最后一句话了就搞定了:
this->schedule(schedule_selector(LoginScenes::movebd));
然后我们看一下效果: