cocos2dx tableview基础:实现多图片的滑动显示

来源:互联网 发布:mac 快捷键一览 编辑:程序博客网 时间:2024/06/07 18:27

通过tableview实现滑动显示26个字母图片,点击图片执行相应的动作。

tableview 需要继承TableViewDataSource(数据源),TableViewDelegate(触屏事件处理),同时实现其虚函数。

代码如下:

头文件TableViewTest.h如下


#ifndef __macstudycocos2dx__TableViewTest__

#define __macstudycocos2dx__TableViewTest__


#include <stdio.h>

#include "cocos2d.h"

#include "extensions/cocos-ext.h"


USING_NS_CC;

USING_NS_CC_EXT;


//void runTableViewTest();


class TableViewTest:publiccocos2d::Layer,publiccocos2d::extension::TableViewDataSource,publiccocos2d::extension::TableViewDelegate

{

public:

    

   staticcocos2d::Scene* createScene();

    

   virtualbool init();

   void toExtensionMainLayer(cocos2d::Ref *sender);

    

    CREATE_FUNC(TableViewTest);

    

   virtualvoid scrollViewDidScroll(cocos2d::extension::ScrollView* view){};

    //重写滑动事件

   virtualvoid scrollViewDidZoom(cocos2d::extension::ScrollView* view){};

    //重写缩放事件

    

    //以下重写TableViewDataSource的虚函数

    virtualvoid tableCellTouched(cocos2d::extension::TableView* table,cocos2d::extension::TableViewCell* cell);

    //定义单元触碰事件

   virtualSize tableCellSizeForIndex(TableView *table,ssize_t idx);

    //定义单元的大小

   virtualTableViewCell* tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx);

    //定义单元格

   virtualssize_t numberOfCellsInTableView(cocos2d::extension::TableView* table);

    //定义单元格数量

    

};


#endif /* defined(__macstudycocos2dx__TableViewTest__) */


TableViewTest.cpp如下:


#include "TableViewTest.h"


Scene* TableViewTest::createScene()

{

    // 'scene' is an autorelease object

   auto scene =Scene::create();

    

    // 'layer' is an autorelease object

   auto layer =TableViewTest::create();

    

    // add layer as a child to scene

    scene->addChild(layer);

    

    // return the scene

   return scene;

}


bool TableViewTest::init(){

   if (!Layer::init()) {

        return false;

    }

   Size winSize=Director::getInstance()->getWinSize();

    

   TableView* tableView=TableView::create(this,Size(800,300));

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

    tableView->setPosition(Vec2(20,winSize.height/2-30));

    tableView->setDelegate(this);

   this->addChild(tableView);

    tableView->reloadData();

    return true;

    

}




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

    

    log("cell touched at index:%ld",cell->getIdx());

    

}


SizeTableViewTest::tableCellSizeForIndex(cocos2d::extension::TableView* table,ssize_t idx){

   returnSize(300,150);

}


TableViewCell* TableViewTest::tableCellAtIndex(cocos2d::extension::TableView* table,ssize_t idx){

   auto letindex=idx+1;

   auto string=String::createWithFormat("let%ld.png",letindex);

   TableViewCell *cell=table->cellAtIndex(idx);

   if (!cell) {

        cell=newTableViewCell();

        cell->autorelease();


       auto sprite=Sprite::create(string->getCString());

        sprite->setAnchorPoint(Vec2::ZERO);

        sprite->setPosition(Vec2(0,0));

        cell->addChild(sprite);

        

       auto label=Label::createWithSystemFont(string->getCString(),"arial",30);

        label->setPosition(Vec2::ZERO);

        label->setAnchorPoint(Vec2::ZERO);

        label->setTag(123);

        cell->addChild(label);

    }

   else{

       auto label=(Label*)cell->getChildByTag(123);

        label->setString(string->getCString());

        

    }

   return cell;

}



ssize_tTableViewTest::numberOfCellsInTableView(cocos2d::extension::TableView *table){

   return26;

}


最好实现的效果如下:




0 0