最新文章
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
cocos2d-x如何弹出键盘
2015年01月14日 10:17
0 点赞
0 评论
更新于 2025-11-21 14:19
本文主要介绍在cocos2d-x中如何弹出键盘,将使用CCTextFieldTTF类。CCTextFieldTTF是一个用于显示和输入文本的控件类,类似于Windows编程中的Static控件和Edit控件。
程序实例:使用TextFieldTTF类创建文本并弹出软键盘
1. 创建头文件
首先创建一个TextFieldTTF.h的头文件,并在其中添加以下代码:
#ifndef __TextFieldTTF_H__
#define __TextFieldTTF_H__
#include "cocos2d.h"
USING_NS_CC;
class TextFieldTTF : public CCLayer
{
public:
bool init();
static CCScene* scene();
// 用于处理触摸事件
bool ccTouchBegan(CCTouch*, CCEvent*);
// 用于在程序中创建一个文本控件
CCTextFieldTTF* textEdit;
CREATE_FUNC(TextFieldTTF);
};
#endif // __HELLOWORLD_SCENE_H__
2. 实现源文件
在TextFieldTTF.cpp中添加以下代码:
#include "TextFieldTTF.h"
CCScene* TextFieldTTF::scene()
{
CCScene* scene = CCScene::create();
TextFieldTTF* layer = TextFieldTTF::create();
scene->addChild(layer);
return scene;
}
bool TextFieldTTF::init()
{
// 初始化父类层
CCLayer::init();
// 得到窗口的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 创建文本框
// 第一个参数:文本框中显示的内容
// 第二个参数:字体
// 第三个参数:文本的大小
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:", "Arial", 36);
// 设置文本框的位置
textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
// 添加文本框到层上
addChild(textEdit);
// 当触摸到控件的时候弹出软键盘
setTouchMode(kCCTouchesOneByOne);
setTouchEnabled(true);
return true;
}
bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
{
// 用于判断是否点中了控件
bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
// 如果点中了控件
if (isClicked)
{
// 弹出软键盘
textEdit->attachWithIME();
}
// 表示接受触摸消息
return true;
}
3. 程序执行结果
- Windows系统:在Windows下单击“Please input your name: ”没有反应,因为Windows系统没有软键盘。
- Android系统:
- 触摸“Please input your name :”后会弹出软键盘。
- 使用软键盘输入一段文字,选择完成后文字会显示在控件上。
程序实例:TextFieldTTF实现输入密码
将TextFieldTTF.cpp文件中的代码改成如下代码:
#include "TextFieldTTF.h"
CCScene* TextFieldTTF::scene()
{
CCScene* scene = CCScene::create();
TextFieldTTF* layer = TextFieldTTF::create();
scene->addChild(layer);
return scene;
}
bool TextFieldTTF::init()
{
// 初始化父类层
CCLayer::init();
// 得到窗口的尺寸
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
// 创建文本框
textEdit = CCTextFieldTTF::textFieldWithPlaceHolder("Please input your name:", "Arial", 36);
// 设置文本框的位置
textEdit->setPosition(ccp(winSize.width / 2, winSize.height / 2));
// 添加文本框到层上
addChild(textEdit);
// 输入密码
textEdit->setSecureTextEntry(true);
// 注册触摸函数,实现当触摸到控件的时候,弹出软键盘
setTouchMode(kCCTouchesOneByOne);
setTouchEnabled(true);
return true;
}
bool TextFieldTTF::ccTouchBegan(CCTouch* touch, CCEvent* ev)
{
// 用于判断是否点中了控件
bool isClicked = textEdit->boundingBox().containsPoint(touch->getLocation());
// 如果点中了控件
if (isClicked)
{
// 弹出软键盘
textEdit->attachWithIME();
}
// 表示接受触摸消息
return true;
}
4. 移植到Android系统的执行结果
- 触摸“Please input your name :”后弹出软键盘。
- 使用软键盘输入一段文字,选择完成后文字显示在控件上。