您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-3.8.1版本tableview的使用(怎么取消弹簧效果);

2016-01-08 00:08 513 查看
1.在VS中设置 C++ 附加包含目录编辑添加$(EngineRoot)这句话。

2.引入头文件,而不这样写的目的是为了解决安卓找不到tableview。在引入命令空间。

3.实现tableview的功能,首页要共有继承TableViewDataSource和TableViewDelegate两个代理类。

4.实现下面的虚方法

virtual void scrollViewDidScroll(cocos2d::extension::ScrollView*view)override{};

   virtual void scrollViewDidZoom(cocos2d::extension::ScrollView*view)override{}

   virtual void tableCellTouched(cocos2d::extension::TableView*table,cocos2d::extension::TableViewCell*cell)override;

   virtual cocos2d::Size tableCellSizeForIndex(cocos2d::extension::TableView*table,ssize_tidx)override;

   virtual cocos2d::extension::TableViewCell* tableCellAtIndex(cocos2d::extension::TableView*table,ssize_tidx)override;

   virtual ssize_t numberOfCellsInTableView(cocos2d::extension::TableView*table)override;

 

5.废话不多说直接上代码

#include"MenuColor.h"

#include"VisibleRect.h"

#include"GlobalDefine.h"

#include"GlobalArray.h"

 

USING_NS_CC;

 

MenuColor* MenuColor::create(floatwidth,floatheight)

{

   automenucolor=new(std::nothrow)MenuColor();

   if(menucolor&&menucolor->init(width,height))

   {

      menucolor->autorelease();

      returnmenucolor;

   }

   else

   {

      CC_SAFE_DELETE(menucolor);

      returnnullptr;

   }

}

 

bool MenuColor::init(floatwidth,floatheight)

{

   if(!LayerColor::initWithColor(Color4B(0,0,0,0),width,height))

   {

      returnfalse;

   }

 

   this->setAnchorPoint(Vec2::ZERO);

   _color3b=Color3B(255,0,0);

   _cellnum=-100;

 

   //创建tableview

   TableView* tableView=TableView::create(this,Size(120*resourceScale,height));

   tableView->setDirection(ScrollView::Direction::VERTICAL);

   tableView->setPosition(Vec2::ZERO);

   tableView->setDelegate(this);

   tableView->setDataSource(this);

   tableView->setVerticalFillOrder(TableView::VerticalFillOrder::TOP_DOWN);

   this->addChild(tableView);

   tableView->reloadData();

   this->setSwallowsTouches(false);

 

   returntrue;

}

 

void MenuColor::tableCellTouched(cocos2d::extension::TableView*table,cocos2d::extension::TableViewCell*cell)

{

   if(_cellnum>=1)

   {

      __Stringselect1=StringUtils::format("colorselect_%zd.png",_cellnum+10);

      autocell2=(TableViewCell*)table->cellAtIndex(_cellnum-1);

 

      if(cell2!=nullptr)

      {

        autoframe=getSpriteFrameByName(select1.getCString());

        autosp2=Sprite::createWithSpriteFrame(frame);

        cell2->removeAllChildren();

        cell2->addChild(sp2);

        sp2->setAnchorPoint(Vec2::ZERO);

        sp2->setPosition(Vec2::ZERO);

        sp2->setScale(resourceScale);

       

        frame=getSpriteFrameByName("colorselect.pmg");

        autosp=Sprite::createWithSpriteFrame(frame);

        sp->setAnchorPoint(Vec2::ZERO);

        sp->setPosition(Vec2(0,-4));

        sp->setScale(resourceScale);

        cell->addChild(sp,4,_cellnum);

        _cellnum=(int)cell->getIdx();

      }

      else

      {

        autoframe=getSpriteFrameByName("colorselect.pmg");

        autosp=Sprite::createWithSpriteFrame(frame);

        sp->setAnchorPoint(Vec2::ZERO);

        sp->setPosition(Vec2(0,-4));

        sp->setScale(resourceScale);

        cell->addChild(sp,4,_cellnum);

        _cellnum=(int)cell->getIdx()+1;

      }

   }

   else

   {

      _cellnum=(int)cell->getIdx()+1;

      autoframe=getSpriteFrameByName("colorselect.png");

      autosp=Sprite::createWithSpriteFrame(frame);

      sp->setAnchorPoint(Vec2::ZERO);

      sp->setPosition(Vec2(0,-4));

      sp->setScale(resourceScale);

      cell->addChild(sp,4,_cellnum);

   }

 

   intr=colorMap[cell->getIdx()][0];

   intg=colorMap[cell->getIdx()][1];

   intb=colorMap[cell->getIdx()][2];

 

   _color3b=Color3B(r,g,b);

 

   if(_colorDelegate!=nullptr)

   {

      _colorDelegate->setColor3B(_color3b);

   }

}

 

Size MenuColor::tableCellSizeForIndex(cocos2d::extension::TableView*table,ssize_tidx)

{

   returnSize(100*resourceScale,110*resourceScale);

}

 

TableViewCell* MenuColor::tableCellAtIndex(cocos2d::extension::TableView*table,ssize_tidx)

{

   autocell=table->cellAtIndex(idx);

   autoselect1=StringUtils::format("colorselect_%zd.png",idx+11);

  

   if(!cell)

   {

      cell=new(std::nothrow)TableViewCell();

      cell->autorelease();

      autoframe=getSpriteFrameByName(select1.c_str());

      autosprite=Sprite::createWithSpriteFrame(frame);

      sprite->setAnchorPoint(Vec2::ZERO);

      sprite->setPosition(Vec2(4*resourceScale,0));

      sprite->setScale(resourceScale);

      cell->addChild(sprite);

      cell->setTag((int)idx+1);

   }

 

   returncell;

}

 

ssize_t MenuColor::numberOfCellsInTableView(cocos2d::extension::TableView*table)

{

   return24;

}

 

void MenuColor::setDrawColorDelegate(ColorDelegate*delegate)

{

   _colorDelegate=delegate;

}

 

Color3B MenuColor::getColor3B()

{

   return_color3b;

}

 

但是根据某些需求不想要tableview自带的弹簧效果,可以使用 tableView->setBounceable(false);来关闭弹簧效果。但是没有了惯性。重写下面的方法就可以解决这个问题

virtual void scrollViewDidScroll(cocos2d::extension::ScrollView* view)override {

      

        //取消弹性

        auto layout = view->getContainer();

        float currentY = layout->getPositionY();

        if(currentY > 0)

        {

            view->setContentOffset(cocos2d::Vec2(0,0));

        }

        if(-currentY > layout -> getContentSize().height - view -> getViewSize().height)

        {

            view -> setContentOffset(cocos2d::Vec2(0, -layout -> getContentSize().height + view -> getViewSize().height));

        }

        

    }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息