值得一提的是文字输入。正如鼠标对键盘的颠覆,从iPhone开始的触摸屏革命已然将实体键盘逼入了一个尴尬的位置,更多的交互通过触摸屏上直观的手势操作完成,但是文字输入依然是必不可少的,例如当我们需要设定用户名的时候。
在没有实体键盘的触屏手机上,文字输入通过虚拟键盘来实现。不幸的是,CCLayer并没有为我们提供一个简化的封装实现;而幸运的是,在Cocos2d-x中已经存在一个现成的文本框控件 CCTextFieldTTF了。尽管这个控件的接口稍微有些复杂,但使用起来并不麻烦。它的外观为屏幕上一块可输入的区域,如同各种平台下的文本框一样,点击后可弹出键盘。
CCTextFieldTTF提供了3个常用的操作接口,具体如下所示:
其中创建CCTextFieldTTF时的第一个参数为提示文本,在文本框中没有输入任何内容时提示用户输入,后面的两个参数分别对应字体和字号。值得注意的是,截至Cocos2d-x 2.0.1版本,CCTextFieldTTF类的工厂函数还在使用旧的命名风格,即它还没有提供"create"风格的工厂函数。
在没有实体键盘的触屏手机上,文字输入通过虚拟键盘来实现。不幸的是,CCLayer并没有为我们提供一个简化的封装实现;而幸运的是,在Cocos2d-x中已经存在一个现成的文本框控件 CCTextFieldTTF了。尽管这个控件的接口稍微有些复杂,但使用起来并不麻烦。它的外观为屏幕上一块可输入的区域,如同各种平台下的文本框一样,点击后可弹出键盘。
CCTextFieldTTF提供了3个常用的操作接口,具体如下所示:
const char* getString(void); //获取当前字符串
bool attachWithIME(); //激活输入法
bool detachWithIME(); //取消激活输入法
这3个方法基本可以满足开发需要了。如果我们在开始场景中添加一个让用户输入用户名的文本框,只需要在StartScene类的初始化代码中添加一个CCTextFieldTTF控件即可。相关代码如下:
CCTextFieldTTF text = CCTextFieldTTF::textFieldWithPlaceHolder(
"Input Your Name...", "Arial", 20);
text->setPosition(ccp(winSize.width / 2, winSize.height / 2 + 40));
this->addChild(text);
text->attachWithIME();//接受键盘输入信息
其中创建CCTextFieldTTF时的第一个参数为提示文本,在文本框中没有输入任何内容时提示用户输入,后面的两个参数分别对应字体和字号。值得注意的是,截至Cocos2d-x 2.0.1版本,CCTextFieldTTF类的工厂函数还在使用旧的命名风格,即它还没有提供"create"风格的工厂函数。
这么做在Windows等含键盘的平台上可以很好地工作,但在手机等移动终端上就有些不足了。移动设备通常没有实体键盘,在不需要输入文字时,游戏的画面可以完整地显示在屏幕之中,然而当需要输入文字时,就会从屏幕下方弹出一个面积很大的虚拟键盘,挡住游戏画面的很大一部分。为了节省屏幕空间,我们采取的做法是在一开始将输入法隐藏,在输入文本框上添加一个空白按钮,在点击按钮时再弹出输入法。