cocos2d-x ScrollView实现帮助界面

来源:互联网 发布:人口普查数据库 编辑:程序博客网 时间:2024/06/05 10:54

使用工具:Xcode4.5

cocos2d-x版本:cocos2d-2.1rc0-x-2.1.2

1. 使用CCScrollView

CCScrollView 在 Cocos2d-x 的扩展库里面,要使用它,必须导入头文件:#include"cocos-ext.h"并加入命名空间:using namespace cocos2d::extension;(或者使用宏:USING_NS_CC_EXT;)

(在VS2010里,可以这样导入:#include "../../extensions/cocos-ext.h",当然前提是extensions库在项目工程文件夹下。)

首先在HelpScene.h里实现它的Delegate,如下:

#ifndef __HELP_SCENE_H__#define __HELP_SCENE_H__#include "cocos2d.h"#include "cocos-ext.h"#include "SimpleAudioEngine.h"USING_NS_CC;USING_NS_CC_EXT;class HelpScene : public cocos2d::CCLayer ,public CCScrollViewDelegate{public:    // Here's a difference. Method 'init' in cocos2d-x returns bool, instead of returning 'id' in cocos2d-iphone    virtual bool init();      // there's no 'id' in cpp, so we recommand to return the exactly class pointer    static cocos2d::CCScene* scene();    CREATE_FUNC(HelpScene);public:    //重写这两个函数,必须实现(在基类中这两个是纯虚函数)void scrollViewDidScroll(CCScrollView* view);void scrollViewDidZoom(CCScrollView* view);public:virtual void onEnter();virtual void onExit();virtual bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);virtual void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);private: void adjustScrollView(float offset); CCScrollView *  scrollView; CCPoint touchPoint; int pageNum;};#endif  // __HELP_SCENE_H__

其实现部分如下:
#include "HelpScene.h"CCScene* HelpScene::scene(){    // 'scene' is an autorelease object    CCScene *scene = CCScene::create();        // 'layer' is an autorelease object    HelpScene *layer = HelpScene::create();        // add layer as a child to scene    scene->addChild(layer);        // return the scene    return scene;    }// on "init" you need to initialize your instancebool HelpScene::init(){       if(!CCLayer::init())   {   return false;   };       //初始化变量   pageNum = 1;   CCSize size = CCDirector::sharedDirector()->getWinSize();       //背景   CCSprite *bg = CCSprite::create("Help_BG-hd.png");   bg->setPosition(ccp(size.width/2,size.height/2));   this->addChild(bg);   //创建CCScrollView,并指定view大小   scrollView = CCScrollView::create(CCSizeMake(480, 320));   CCLayer *layer = CCLayer::create();   for (int i=1;i<=6;i++)   {             CCSprite *sprite = CCSprite::create(CCString::createWithFormat("Help_%02d_chs-hd.png", i)->getCString());             sprite->setScaleY(0.5);             sprite->setAnchorPoint(CCPointZero);     sprite->setPosition(ccp(size.width*(i-1),0));     layer->addChild(sprite);   }      layer->setAnchorPoint(CCPointZero);   layer->setPosition(CCPointZero);   scrollView->setPosition(ccp(20,50));   scrollView->setContentOffset(CCPointZero);        layer->setContentSize(CCSizeMake(480*6, 320));   scrollView->setContainer(layer);   scrollView->setTouchEnabled(false);   scrollView->setDelegate(this);   scrollView->setDirection(kCCScrollViewDirectionHorizontal);   this->addChild(scrollView);   CCSpriteFrameCache *cache =  CCSpriteFrameCache::sharedSpriteFrameCache();      ache->addSpriteFrame(CCSpriteFrame::create("Help_Point01-hd.png",CCRectMake(0,0,32,32)),"Help_Point01-hd.png");   cache->addSpriteFrame(CCSpriteFrame::create("Help_Point02-hd.png",CCRectMake(0,0,32,32)),"Help_Point02-hd.png");   for (int i=1;i<=6;i++)   {       CCSprite *point = CCSprite::createWithSpriteFrameName("Help_Point01-hd.png");       point->setTag(100+i);       point->setPosition(ccp(160+30*i,30));       this->addChild(point);   } CCSprite *point = (CCSprite *)this->getChildByTag(101); point->setDisplayFrame(cache->spriteFrameByName("Help_Point02-hd.png"));         return true;}void HelpScene::scrollViewDidScroll(cocos2d::extension::CCScrollView *view){}void HelpScene::scrollViewDidZoom(cocos2d::extension::CCScrollView *view){}void HelpScene::onEnter(){CCLayer::onEnter();CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 1, false);}void HelpScene::onExit(){CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);CCLayer::onExit();}bool HelpScene::ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){touchPoint = pTouch->getLocation();return true;}void HelpScene::ccTouchMoved(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){}void HelpScene::ccTouchEnded(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){CCPoint endPoint = pTouch->getLocation();adjustScrollView(endPoint.x-touchPoint.x);}void HelpScene::ccTouchCancelled(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent){CCPoint endPoint = pTouch->getLocation();adjustScrollView(endPoint.x-touchPoint.x);}void HelpScene::adjustScrollView(float offset){CCSize size =CCDirector::sharedDirector()->getWinSize();    CCSpriteFrameCache *cache =  CCSpriteFrameCache::sharedSpriteFrameCache();CCSprite *point = (CCSprite *)this->getChildByTag(100+pageNum);point->setDisplayFrame(cache->spriteFrameByName("Help_Point01-hd.png"));if (offset<0){  pageNum ++;}      else{  pageNum --;}if (pageNum <1){pageNum = 1;}      else if(pageNum > 6){  pageNum =6;}point = (CCSprite *)this->getChildByTag(100+pageNum);point->setDisplayFrame(cache->spriteFrameByName("Help_Point02-hd.png"));CCPoint  adjustPos = ccp(-size.width*(pageNum-1),0);scrollView->setContentOffset(adjustPos, true);}


效果图:(网上素材)




原创粉丝点击