最新文章
Cocos2d-x游戏开发实例详解7:对象释放时机
03-25 13:59
Cocos2d-x游戏开发实例详解6:自动释放池
03-25 13:55
Cocos2d-x游戏开发实例详解5:神奇的自动释放
03-25 13:49
Cocos2d-x游戏开发实例详解4:游戏主循环
03-25 13:44
Cocos2d-x游戏开发实例详解3:无限滚动地图
03-25 13:37
Cocos2d-x游戏开发实例详解2:开始菜单续
03-25 13:32
cocos2dx CCTextFieldTTF在Android上调用键盘
一、CCTextFieldTTF 简介
CCTextFieldTTF 是 Cocos2d-x 中用于创建输入框的控件。在游戏中,当我们点击输入框时,它会弹出虚拟键盘,常用于制作用户名、密码输入等场景,非常实用。下面我们将详细了解它的使用方法。
用法
使用 CCTextFieldTTF::create 方法创建输入框,其语法如下:
CCTextFieldTTF::create("默认显示的文本", "字体名", 字体大小);
其他常用函数
getString():获取文本框中的内容。setString(const char* text):设置文本框的内容。attachWithIME():开启虚拟键盘。detachWithIME():关闭虚拟键盘。
单纯创建一个输入框是不够的,我们还需要添加监听事件,以便获取输入框的实时状态,如字符数量、长度等。这里我们会用到 CCTextFieldDelegate 接口。
二、实现 CCTextFieldDelegate 接口
1. 修改头文件 Myhello.h
首先,引用命名空间:
using namespace cocos2d;
然后,让我们的类继承 CCTextFieldDelegate。修改类的继承声明如下:
class Myhello : public cocos2d::CCLayer, cocos2d::CCTextFieldDelegate
多继承时,在两个继承类之间用逗号分隔。接下来,我们需要实现一些回调函数,用于监控输入框的各种事件:
// 当用户启动虚拟键盘时的回调函数
virtual bool onTextFieldAttachWithIME(CCTextFieldTTF * mysender);
// 当用户关闭虚拟键盘时的回调函数
virtual bool onTextFieldDetachWithIME(CCTextFieldTTF * mysender);
// 当用户输入字符时的回调函数
virtual bool onTextFieldInsertText(CCTextFieldTTF * mysender, const char * text, int textnum);
// 当用户删除文字时的回调函数
virtual bool onTextFieldDeleteBackward(CCTextFieldTTF * mysender, const char * text, int textnum);
这些方法是 CCTextFieldDelegate 接口自带的,我们只需要了解其含义并正确实现即可。
三、在 Myhello.cpp 中使用 CCTextFieldTTF
1. 添加引用
using namespace CocosDenshion;
2. 修改初始化函数 init()
在 init() 函数中添加以下代码:
// 创建一个输入框
CCTextFieldTTF * mytext = CCTextFieldTTF::textFieldWithPlaceHolder("屌丝快输", "Arial", 24);
// 设置输入框的位置
CCSize mysize = CCDirector::sharedDirector()->getWinSize();
mytext->setPosition(ccp(mysize.width / 2, mysize.height - 100));
// 将输入框添加到当前层
this->addChild(mytext, 2);
// 绑定 `CCTextFieldDelegate` 接口
mytext->setDelegate(this);
// 开启虚拟键盘
mytext->attachWithIME();
// 关闭虚拟键盘(这里需要注释掉,否则开启后会立即关闭)
// mytext->detachWithIME();
3. 实现四个回调函数
在实现回调函数时,返回 true 会中断相应的操作,因此我们返回 false。如果需要记录操作日志,可以在每个函数内部使用 CCLOG("日志内容")。
bool Myhello::onTextFieldAttachWithIME(CCTextFieldTTF * mysender) {
// 启动键盘
return false;
// 不启动键盘
// return true;
}
bool Myhello::onTextFieldDetachWithIME(CCTextFieldTTF * mysender) {
// 关闭键盘
return false;
// 不关闭键盘
// return true;
}
bool Myhello::onTextFieldInsertText(CCTextFieldTTF * mysender, const char * text, int textnum) {
// 输入字符
return false;
// 不输入字符
// return true;
}
bool Myhello::onTextFieldDeleteBackward(CCTextFieldTTF * mysender, const char * text, int textnum) {
// 删除字符
return false;
// 不删除字符
// return true;
}
四、测试与问题解决
当我们生成并启动程序后,可能会发现没有弹出虚拟键盘。经过与前辈交流得知,在 Windows 环境下可能不会显示虚拟键盘。为了验证功能是否正常,我们需要生成 APK 文件并在 Android 设备上进行测试。下一节我们将提前介绍生成 APK 的方法。