转自:http://www.cnblogs.com/dcxing/archive/2013/01/16/2862068.html

CCTableView在游戏中一般用在背包这样场景或层中,当然也不止这些,在ios开发中UITableView的应用是相当的广泛,当然它们的用途是一样的。(其实你会发现CCtableView其实就是参照UITableView来写的,所以做过ios开发的同学happy了)。

既然说到了用到背包的地方,那么我们就做一个简单的背包信息的例子来学习它吧。

  先上代码再说 .h文件

//
// CCTableViewLayer.h
// Cocos2dXLearnDemo
//
//
#ifndef __Cocos2dXLearnDemo__CCTableViewLayer__
#define __Cocos2dXLearnDemo__CCTableViewLayer__
#include <iostream>
#include "cocos2d.h"
#include "cocos-ext.h"
USING_NS_CC;
USING_NS_CC_EXT; class CCTableViewLayer:publicCCLayer,publicCCTableViewDataSource,publicCCTableViewDelegate{
public:
// Method 'init' in cocos2d-x returns bool, instead of 'id' in cocos2d-iphone (an object pointer)
virtual bool init();
// preprocessor macro for "static create()" constructor ( node() deprecated )
CREATE_FUNC(CCTableViewLayer);
// DataSource
/**
* cell height for a given table.
*
* @param table table to hold the instances of Class
* @return cell size
*/
virtual CCSize cellSizeForTable(CCTableView *table); /**
* a cell instance at a given index
*
* @param idx index to search for a cell
* @return cell found at idx
*/
virtual CCTableViewCell* tableCellAtIndex(CCTableView *table, unsigned int idx);
/**
* Returns number of cells in a given table view.
*
* @return number of cells
*/
virtual unsigned int numberOfCellsInTableView(CCTableView *table); //delegate
virtual void tableCellTouched(CCTableView* table, CCTableViewCell* cell);
// 另外还要引入CCScrollViewDelegate的虚函数,原因是CCTableView继承自CCScrollView
virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view);
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view);
}; #endif /* defined(__Cocos2dXLearnDemo__CCTableViewLayer__) */ .m文件
//
// CCTableViewLayer.cpp
// Cocos2dXLearnDemo
//
//
#include "CCTableViewLayer.h"
#include "TestSprite.h" boolCCTableViewLayer::init(){
if(!CCLayer::init()){
returnfalse;
} // 第一个参数是dataSource
CCTableView *tableView=CCTableView::create(this, CCSizeMake(, ));
tableView->setPosition(ccp(, ));
// 设置方向
tableView->setDirection(kCCScrollViewDirectionVertical);
tableView->setAnchorPoint(CCPointZero);
// tableView->setAnchorPoint(ccp(0.5, 0.5));
tableView->setPosition(ccp(,));
tableView->setDelegate(this); CCLOG("AnchPoint=%f,%f",tableView->getAnchorPoint().x,tableView->getAnchorPoint().y); // 设置顺序是自上往下
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
// CCLOG("tableView->getPosition()=%f,%f",tableView->getPosition().x,tableView->getPosition().y);
this->addChild(tableView);
// CCLOG("AfterAnchPoint=%f,%f",tableView->getAnchorPoint().x,tableView->getAnchorPoint().y);
tableView->reloadData();
this->setTouchEnabled(true); returntrue;
} //datasource
CCSizeCCTableViewLayer::cellSizeForTable(CCTableView *table){
return CCSizeMake(table->getContentSize().width, );
}  CCTableViewCell* CCTableViewLayer::tableCellAtIndex(CCTableView *table, unsignedint idx){ CCTableViewCell *cell = table->dequeueCell(); if(!cell){
cell = new CCTableViewCell();
cell->autorelease(); } cell->removeAllChildrenWithCleanup(true);
for (int i=; i<; i++) {
CCSprite *testSprite=CCSprite::create("Icon.png");
testSprite->setPosition(ccp(+*i, ));
cell->addChild(testSprite);
}
return cell;
} unsigned int CCTableViewLayer::numberOfCellsInTableView(CCTableView *table){
return ;
} //delegate
voidCCTableViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell){
// CCLog("HHHHHHHH");
} void CCTableViewLayer::scrollViewDidScroll(CCScrollView* view){
// CCLOG("scrollViewDidScroll");
} //设置Zoom的时候进行调用
void CCTableViewLayer::scrollViewDidZoom(CCScrollView* view){
// CCLOG("scrollViewDidZoom");
}

首先CCTableView继承自CCScrollView,自然它是在 Cocosd-x 的扩展库里面.

所以你会发现要引入下面两个虚函数。

virtual void scrollViewDidScroll(cocos2d::extension::CCScrollView* view) {}
virtual void scrollViewDidZoom(cocos2d::extension::CCScrollView* view) {}

另外它的用法基本和UITableView是一样的。当然我们这里要继承

public CCTableViewDataSource,public CCTableViewDelegate

几个方法和UITableView的都差不多。

//CCTableViewDataSource
CCSizeCCTableViewLayer::cellSizeForTable(CCTableView *table)
unsigned int CCTableViewLayer::numberOfCellsInTableView(CCTableView *table)
CCTableViewCell* CCTableViewLayer::tableCellAtIndex(CCTableView *table, unsignedint idx)
//CCTableViewDelegate
void CCTableViewLayer::tableCellTouched(CCTableView* table, CCTableViewCell* cell)

cocos2d-x CCTableView的更多相关文章

  1. Cocos2D游戏项目CCTableView在Xcode7.2下的无法滚动问题

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 一个RPG游戏转换到Xcode7.2下发现一个问题,原来可以上 ...

  2. Cocos2d—X游戏开发之CCTableView详解(十一)

    本来很早就想写关于CCTableView的文章,但是在基本功能实现之后呢,项目需求增加导致对这个控件的研究必须更加深入一点. 好的,现在开始介绍一下这个控件,在Cocos2d—X引擎中,这是一个仿制i ...

  3. 【Cocos2d-x for WP8 学习整理】(4)CCTableView 实现《天天爱消除》中的得分榜

    接上回 CCScrollView 继续,在GUI 里还有个 CCScrollView 的子类---CCTableView . 这个名字应该是从 IOS 里的 UITableView来的,其实是跟WP8 ...

  4. cocos2d-x CCScrollView和CCTableView的使用(转载)

    转载请注明来自:Alex Zhou的程序世界,本文链接:http://codingnow.cn/cocos2d-x/1024.html //============================== ...

  5. CCScrollView/CCTableView(CCTableViewDelegate CCTableViewDataSource CCTableView-滑动列表-游戏中大量使用 非常重要的一个类)

    tableview scrollViewDidScroll函数中有一段   ----  即---滑动tableview时触发的函数 : 会将全部显示的cell又一次刷新(刷新函数中调用了自己定义的ta ...

  6. CCTableView 简单样例

    非常像android中的listview #pragma once; #include "cocos2d.h" using namespace cocos2d; //使用CCTab ...

  7. Cocos2d-x CCTableView实现列表

    在ios程序设计中,会大量使用到tableview视图(UITableView),那么在cocos2d-x中,如果需要类似的列表,该如何实现呢?在引擎中参照ios中的UITableView实现了一个叫 ...

  8. cocos2d-x关于CCTableView的“乱序问题”的理解

    Cocos2d-x有一个不错的控件CCTableView.之前用的时候发现有cell的顺序错乱和重复出现的问题.后来仔细看了一下源码,发现是自己用法错误.但是网上有人说是一个bug,要改源码.我发现2 ...

  9. CCTableView(一)

    #ifndef __TABLEVIEWTESTSCENE_H__ #define __TABLEVIEWTESTSCENE_H__ #include "cocos2d.h" #in ...

  10. CCTableView

    今天用到TableView, 我就来记录一下....这些都是在网上找到了资料 //首先 继承 : public cocos2d::extension::CCTableViewDelegate,publ ...

随机推荐

  1. 【 D3.js 高级系列 — 7.0 】 标注地点

    有时需要告诉用户地图上的一些目标,如果该目标是只需要一个坐标就能表示的,称其为"标注". 1. 标注是什么 标注,是指地图上只需要一个坐标即可表示的元素.例如,在经纬度(116, ...

  2. LeetCode: Unique Paths I & II & Minimum Path Sum

    Title: https://leetcode.com/problems/unique-paths/ A robot is located at the top-left corner of a m  ...

  3. linux面试题1

    一.填空题:1. 在Linux系统中,以 文件 方式访问设备 .2. Linux内核引导时,从文件 /etc/fstab 中读取要加载的文件系统.3. Linux文件系统中每个文件用 i节点 来标识. ...

  4. C# 使用C/S模式操作小票机打印

    此方式适用于市场上大多数的小票机 佳博.POS58 等,不适用于有些标签打印机 比如斑马打印机等 直接贴代码: private FileStream fs = null; [DllImport(&qu ...

  5. [Papers]NSE, $\n u_3$, Lebesgue space, [Pokorny, EJDE, 2003; Zhou, MAA, 2002]

    $$\bex \n u_3\in L^p(0,T;L^q(\bbR^3)),\quad \frac{2}{p}+\frac{3}{q}=\frac{3}{2},\quad 2\leq q\leq \i ...

  6. [Everyday Mathematics]20150118

    设 $X$ 是线性空间, $\phi_1,\cdots,\phi_n,\phi$ 是 $X$ 上的线性泛函, 试证: $$\bex \phi\in \span\sed{\phi_1,\cdots,\p ...

  7. linux命令——scp 两台linux机器间文件或目录传输

    不同的Linux之间copy文件常用有3种方法: 第一种:ftp,也就是其中一台Linux安装ftpServer,这样可以另外一台使用ftp的client程序来进行文件的copy. 第二种:采用sam ...

  8. Selenium2Library系列 keywords 之 _SelectElementKeywords 之 page_should_not_contain_list(self, locator, message='', loglevel='INFO')

    def page_should_not_contain_list(self, locator, message='', loglevel='INFO'): """Veri ...

  9. iOS多线程之GCD小记

    iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

  10. POJ 1004 解题报告

    1.题目描述: http://poj.org/problem?id=1004 2.解题过程 这个题目咋一看很简单,虽然最终要解出来的确也不难,但是还是稍微有些小把戏在里面,其中最大的把戏就是float ...