先来个效果图
---------------------------------分割线附上代码----------------------------------------------------------------
#include <stdio.h> #include "HelpScene.h" #include "StartMenuScene.h" #include "HelpCCLayer.h" using namespace cocos2d; using namespace std; CCPoint centerPoint; CCSprite* h1Sprite; CCSprite* h2Sprite; CCSize size; float offSetAnchor; float y; float beginX; float maxLen=9; //sprites数组的长度 CCSprite* sprites[9]; int currentSprite; float spriteWidth; CCScene* HelpScene::scene(void) { CCScene * scene=NULL; do{ scene = CCScene::create(); CC_BREAK_IF(!scene); HelpScene *layer =HelpScene::create(); CC_BREAK_IF( !layer); HelpCCLayer* layer1=HelpCCLayer::create(); CC_BREAK_IF( !layer1); scene->addChild(layer,0); scene->addChild(layer1,2); }while(0); return scene; } bool HelpScene::init(void){ bool bRet=false; do{ CC_BREAK_IF(! CCLayer::init()); this->setTouchEnabled(true); size= CCDirector::sharedDirector()->getWinSize(); CCSprite* bSprite=CCSprite::create("/help/help_kuang.png"); CC_BREAK_IF(! bSprite); bSprite->setPosition(ccp(size.width/2, size.height/2)); y=size.height/2+20;; centerPoint=CCPointMake(size.width/2,size.height/2+20); sprites[0]=CCSprite::create("/help/cn/howtoplay01.jpg"); sprites[1]=CCSprite::create("/help/cn/howtoplay02.jpg"); sprites[2]=CCSprite::create("/help/cn/howtoplay03.jpg"); sprites[3]=CCSprite::create("/help/cn/howtoplay04.jpg"); sprites[4]=CCSprite::create("/help/cn/howtoplay05.jpg"); sprites[5]=CCSprite::create("/help/cn/howtoplay06.jpg"); sprites[6]=CCSprite::create("/help/cn/howtoplay07.jpg"); sprites[7]=CCSprite::create("/help/cn/howtoplay08.jpg"); sprites[8]=CCSprite::create("/help/cn/howtoplay09.jpg"); spriteWidth=sprites[0]->getContentSize().width; //拼接图片 for(int i=0;i<9;i++){ sprites[i]->setPosition(ccp(size.width/2+spriteWidth*i,y)); this->addChild(sprites[i],0); } h1Sprite=sprites[0]; h2Sprite=sprites[1]; //add back item CCMenu *menu=CCMenu::create(); menu->setPosition(CCPointZero); CCMenuItemImage *backImage=CCMenuItemImage::create("/help/cn/help_back1.png","/help/cn/help_back2.png",this,menu_selector(HelpScene::backMenuCallback)); backImage->setPosition(ccp(size.width/2,90)); menu->addChild(backImage,0); this->addChild(bSprite,1); this->addChild(menu,2); currentSprite=0; bRet=true; }while(0); return bRet; } void HelpScene::backMenuCallback(CCObject *pSender){ CCDirector::sharedDirector()->replaceScene(StartMenu::scene()); } void HelpScene::ccTouchesBegan(CCSet *touches, CCEvent *pEvent){ CCSetIterator iterator= touches->begin(); CCTouch *touch =(CCTouch*)(*iterator); CCPoint tempPoint =touch->getLocationInView(); offSetAnchor=tempPoint.x-size.width/2; beginX=tempPoint.x; } void HelpScene::ccTouchesMoved(CCSet *touches,CCEvent *pEvent){ CCSetIterator iterator= touches->begin(); CCTouch *touch =(CCTouch*)(*iterator); CCPoint tempPoint =touch->getLocationInView(); float t=tempPoint.x-beginX; for(int j=0;j<maxLen;j++){ //第一行 if(currentSprite==0){ if(t>20){ break; } //page++ for(int i=0;i<maxLen;i++){ //+spriteWidth*i sprites[i]->runAction( CCPlace::actionWithPosition(CCPointMake(tempPoint.x-offSetAnchor-spriteWidth*(currentSprite-i),y))); } }else //不是最后一行 if(currentSprite<maxLen-1){ for(int i=0;i<9;i++){ sprites[i]->runAction( CCPlace::actionWithPosition(CCPointMake(tempPoint.x-offSetAnchor-spriteWidth*(currentSprite-i),y))); } }//最后一行 else if(currentSprite>=maxLen-1){ if(t<-20){ break; } for(int i=0;i<maxLen;i++){ //+spriteWidth*i sprites[i]->runAction( CCPlace::actionWithPosition(CCPointMake(tempPoint.x-offSetAnchor-spriteWidth*(currentSprite-i),y))); } } } } void HelpScene::ccTouchesEnded(CCSet *touches,CCEvent *pEvent){ CCSetIterator iterator= touches->begin(); CCTouch *touch =(CCTouch*)(*iterator); CCPoint tempPoint =touch->getLocationInView(); float offset= tempPoint.x-beginX; //left if(offset>0){ if(offset>100&¤tSprite>0){ for(int i=0;i<maxLen;i++){ sprites[i]->runAction(CCMoveTo::actionWithDuration(0.5,CCPointMake(size.width/2+spriteWidth*(i-currentSprite+1),getCenterPoint().y))); } currentSprite-=1; }else{ for(int i=0;i<maxLen;i++){ //sprites[i]->runAction( CCPlace::actionWithPosition(CCPointMake(tempPoint.x-offSetAnchor+spriteWidth*i,y))); sprites[i]->runAction(CCMoveTo::actionWithDuration(0.1,CCPointMake(size.width/2+spriteWidth*(i-currentSprite),getCenterPoint().y))); } } } //right if(offset<0){ if(offset<-100&¤tSprite<maxLen-1){ for(int i=0;i<maxLen;i++){ sprites[i]->runAction(CCMoveTo::actionWithDuration(0.3,CCPointMake(size.width/2-spriteWidth*(currentSprite+1-i),getCenterPoint().y))); } currentSprite+=1; }else{ for(int i=0;i<maxLen;i++){ sprites[i]->runAction(CCMoveTo::actionWithDuration(0.1,CCPointMake(size.width/2-spriteWidth*(currentSprite-i),getCenterPoint().y))); } } } } void HelpScene::registerWithTouchDispatcher(void){ CCDirector::sharedDirector()->getTouchDispatcher()->addStandardDelegate(this,1); } CCPoint HelpScene::getCenterPoint(){ return centerPoint; }