cocos2d_x_03_常用类的使用

一、TextFieldTTF输入框的使用

#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);

}

二、自定义类Ball,继承自Sprite

Ball.h

CREATE_FUNC(type)宏

Ball.cpp

init方法的实现

在主场景中使用自定义类,创建实例对象

可以是在onEnter()方法,也可以在init()方法

三、Cocos2d-x的内存管理

引用计数 reference count

推荐:使用时,先retain,使用完release

不建议:delete

简化操作:创建完毕后,使用autorelease();

四、菜单的使用

第1种方式:设置 回调函数 为 闭包函数,它属于c++11最新特性

菜单项的 回调函数类型 定义如下:

第2种方式:设置 菜单项 的回调方法,通过宏

CC_CALLBACK_1宏

.h文件中的回调方法声明

.cpp文件中回调方法的实现

五、TableView的使用

导入cocos2d-x扩展头文件,里面有CCTableView.h

场景继承自datasouce和delegate

下面是数据源的方法声明

下面是tableView代理的声明

实例化一个tableView

整个场景的完整的头文件

整个场景的方法实现.cpp文件

//
//  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>

重点是:重用机制

tableCellTouched 相当于iOS中的didSlectedRowAtIndexPath

时间: 2024-10-06 13:40:06

cocos2d_x_03_常用类的使用的相关文章

QT开发(二十七)——QT常用类(一)

QT开发(二十七)--QT常用类(一) 一.QString 1.QString简介 QString提供了Unicode编码的字符串,使用隐式共享技术来节省内存和不必要的数据拷贝,不必考虑跨平台的兼容性. QString类成员函数中除了 ascii().latin1().utf8().local8Bit()函数,其他所有的函数都是可重入的. 2.QString成员函数 QString::QString ( const QChar * unicode, int size ) QString::QSt

常用类

常用类 1.Java.util.Locale Java.util.Locale类是区域描述类,用来描述当前区域是哪个区域的. 怎么创建一个区域? //直接用类定义的常量来得到(能得到绝大多数有名的国家的语言和国家名,但朝鲜这样的小国家就只能自己用下面的方法定义了). 1.Locale lo=Locale.CHINA 2.Locale lo=new Locale("朝鲜语","朝鲜")//自己定义个区域的语言和国家名字. 两个常用的方法: 1.获得地区国家: //用当

第七章:常用类

第七章:常用类 包装类 java中有8中基本类型,对应有八种包装类作用:包装类中封装了该类型常用的属性和方法,以方便操作.byte---->Byteshort--->Shortint--->Integerlong---->Longfloat---->Floatdouble---->Doublechar---->Characterboolean---->Boolean装箱:将基本数据类型转换成包装类,经常通过构造方法完成.Integer i = new Int

异常处理、常用类

Exception Thowable分为Error.Exception RuntimeException 非检查异常,可以不用强制捕获 捕获异常 try{ 可能出现异常的代码 } catch(Exception e1){ 捕获块 } catch(Exception e2){ 捕获块 } catch(Exception e3){ 捕获块 } ......... catch(Exception en){ 捕获块 } finally{ 不管如何都会执行,一般放入资源关闭. } throws关键字 抛出

java基础教程-常用类(四)

四.常用类 4.1字符串相关的类(String StringBuffer) 4.1.1String类   4.1.2StringBuffer类(代表可变的) 解释一下可变和不可变 String s1 = “hello”; String s2 = “world”; s1+=s2; 实际上又开辟了一块内存,将hello和world copy进去,s1指向新的内存 而StringBuffer只是在s1后面增加了一块内存,把world加上,不需要copy String与StringBuffer只有这一定

2015_1_28_IO与常用类

/*日志名格式  年_月_日_内容 如2015_1_28_IO与常用类*/ ************************************************************************************************************************************************************** 日期:2015年1月 28日 主题:IO .常用类 相关文件夹:oracle/相关课件/第12章_Java

C++ 常用类 string类

===6.3.2使用string对象=== string word="I love China" *链接字符串* string description=adjective  + " " + word; _Note_: 不能连接两个字符串字面量,下面的语句是错误的 string test= "I have" + "a dream"; ===6.3.3访问字符串中的字符=== *读取字符串* getline(cin, text);

异常处理与常用类

异常的三个种类: 检查异常:用户错误操作或者是不能被程序员预见的问题,必须由java语言来处理. 运行时异常:运行时异常是一个可以被程序员避免的异常,比如像数组越界.除数为0.引用为null. 错误:错误不是异常,是程序员或用户无法控制的问题,像调用栈溢出. 异常的控制流程: 异常是一个被方法抛出的对象,可以有三种方式来处理: 1.捕获这个异常 2.捕获异常并向下抛出  3.不捕获让它向调用栈弹出. 我们可以使用Throwable类的printStackTrace()方法打印调用栈跟踪信息. T

Java——常用类(String)

[常用类] <1>字符串相关类(String.StringBuffer) <2>基本数据类型包装类 <3>Math类 <4>File类 <5>枚举类 [String类] <1>java.lang.String类代表不可变的字符序列. <2>String类的常见构造方法: String(String original) //创建一个String对象为original的拷贝 String(char[] value) //用一个