标签:cocos2d-x cocos2d c++ 闭包 callback

#pragma mark - 自定义方法
// 自定义方法,添加一个 TextField
void TextFieldScene::addOneTextField(float x,float y)
{
TextFieldTTF *field = TextFieldTTF::textFieldWithPlaceHolder("请输入:","宋体",50);
field->setPosition(x,y);
// 添加精灵到当前 Layer
this->addChild(field);
// 2、实例化一个触摸监听器 对象
auto listener = EventListenerTouchOneByOne::create();
// 当触摸开始时,绑定一个闭包函数;
// 【】表示 要传入的外界对象,此处是field
// ()表示参数
listener->onTouchBegan = [field](Touch *t,Event *e){
// getLocation 返回一个OpenGL坐标
// 如果点击的点,在textField上,才允许输入
if (field->getBoundingBox().containsPoint(t->getLocation())) {
field->attachWithIME();
}else{
field->detachWithIME();
}
return false;
};
// 3、获取事件分发器,添加一个事件监听器,到this身上;即监听的是field对象【文本输入框】
Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, field);
}


//
// TableViewScene.cpp
// 01_cocos2d-x
//
// Created by beyond on 14-10-4.
#include "TableViewScene.h"
Scene* TableViewScene::createScene()
{
// 'scene' 自动释放
// 创建一个scene
auto scene = Scene::create();
// 'layer' 自动释放
auto layer = TableViewScene::create();
// 将图层 添加到场景中
scene->addChild(layer);
// 返回 填充好图层的 场景
return scene;
}
// 在 "init" 方法中,实例化自己要用的精灵对象
bool TableViewScene::init()
{
// 1. 调用父类的init , cpp 没有super,直接写父类名
if ( !Layer::init() ) return false;
// 屏幕尺寸
winSize = Director::getInstance()->getVisibleSize();
// 添加一个tableview
Size size = Size(300, 300);
TableView *tv = TableView::create(this, size);
// 设置锚点
tv->setAnchorPoint(Point(0, 0));
// 设置位置
tv->setPosition(winSize.width/2, winSize.height/2);
// 设置代理
tv->setDelegate(this);
// 添加到this
addChild(tv);
return true;
}
#pragma mark - 数据源方法
// 下面全是数据源方法
// 共有多少行
ssize_t TableViewScene::numberOfCellsInTableView(TableView *table)
{
return 7;
}
// 每一行的尺寸
Size TableViewScene::tableCellSizeForIndex(TableView *table, ssize_t idx)
{
return Size(300, 60);
}
// 每一行的cell
TableViewCell* TableViewScene::tableCellAtIndex(TableView *table, ssize_t idx)
{
// 重用机制,先从缓存池中取,取不到再创建
TableViewCell *cell = table->dequeueCell();
LabelTTF *label;
if (cell==NULL) {
// 创建一个cell
cell = TableViewCell::create();
// 创建一个新的label
label = LabelTTF::create();
// 绑定标记
label->setTag(5267);
// 设置字体大小
label->setFontSize(30);
// 设置锚点
label->setAnchorPoint(Point(0, 0));
// 添加到cell
cell->addChild(label);
}else{
// 直接取出cell里面的 label,重新赋值
label = (LabelTTF*)cell->getChildByTag(5267);
}
std::string arr[] = {"宝玉","黛玉","宝钗","湘云","探春","妙玉","晴雯"};
// 设置label内容
label->setString(StringUtils::format("Label %ld,%s",idx,arr[idx].c_str()));
// 返回独一无二的cell
return cell;
}
#pragma mark - 代理 方法
//下面全是代理方法
// 点击时调用
void TableViewScene::tableCellTouched(TableView* table, TableViewCell* cell)
{
LabelTTF *label = (LabelTTF*)cell->getChildByTag(5267);
std::string content = StringUtils::format("点击了第n行,内容是:%s",label->getString().c_str());
MessageBox(content.c_str(), "标题");
}StringUtils::format();<span style="color: rgb(57, 57, 57); font-family: 'Courier New'; font-size: 24px; line-height: 32px; background-color: rgb(245, 245, 245);"><strong>方法</strong></span>
<span style="color: rgb(57, 57, 57); font-family: 'Courier New'; font-size: 24px; line-height: 32px; background-color: rgb(245, 245, 245);"><strong>返回的是std::string对象,可以通过c_str()</strong></span><span style="font-family: 'Courier New'; background-color: rgb(245, 245, 245);">方法转成c字符串</span>
标签:cocos2d-x cocos2d c++ 闭包 callback
原文地址:http://blog.csdn.net/pre_eminent/article/details/39778387