Colin-Liao 个人原创,欢迎转载,转载请注明地址。Colin-Liao的专栏地址http://blog.csdn.net/focusdeveloper
今天分享下如何做一个聊天窗口的文字输入框并且在其中提取汉字以及各种字符。
这个方法是相当于重写cocos2d-x中的CCTextFieldTTF这个类。那么下面看看头文件
<span style="font-family: SimSun;"><span style="font-size:14px;">#include <iostream>
#include "cocos2d.h"
USING_NS_CC;
class ChatText: public CCTextFieldTTF, public CCTextFieldDelegate
{
CC_SYNTHESIZE(CCRect, textLabelRect, TextLabelRect);//输入框矩形
private:
// 光标精灵
CCSprite *m_pChatSprite;
// 光标动画
CCAction *m_pChatAction;
// 光标坐标
CCPoint m_chatPos;
// 输入框内容
std::string m_pInputText;
//输入框实际内容
std::string m_pInputString;
//输入框文字字节数组
int m_pInputCount[60];
//第几个文字
int index;
public:
ChatText();
~ChatText();
// static
static ChatText* textFieldWithPlaceHolder(const char *placeholder, const char *fontName, float fontSize);
// // CCLayer
void onEnter();
void onExit();
// 初始化光标精灵
void initChatSprite(int nHeight);
// CCTextFieldDelegate
virtual bool onTextFieldAttachWithIME(CCTextFieldTTF *pSender);
virtual bool onTextFieldDetachWithIME(CCTextFieldTTF * pSender);
virtual bool onTextFieldInsertText(CCTextFieldTTF * pSender, const char * text, int nLen);
virtual bool onTextFieldDeleteBackward(CCTextFieldTTF * pSender, const char * delText, int nLen);
// 打开输入法
void openIME();
// 关闭输入法
void closeIME();
void emptyString();
//获得输入框实际内容
const char* getInputString();
};
</span></span>
这里继承了CCTextFieldTTF和CCTextFieldDelegate两个类,并且重写了其中的函数,之后会贴出每个函数的作用。
因为在屏幕上实现一个输入框的长度是有限的,但是当我们输入的文字超过这个输入框的时候,那么我们应该把前面的文字隐藏起来,这就是为什么这里会设置两个string ,m_pInputText是用来实际显示出来的文字内容,m_pInputString是输入框中实际文字内容。这里有一个整数数组,长度为60,也就是说可以输入60个字符,然后index为这个数组的下标。
下面贴出cpp文件中每个函数并且讲解
<span style="font-family: SimSun;"><span style="font-size:14px;">ChatText::ChatText()
{
CCTextFieldTTF();
m_pChatSprite = NULL;
m_pChatAction = NULL;
}
ChatText::~ChatText()
{
}
void ChatText::onEnter()
{
CCTextFieldTTF::onEnter();
this->setDelegate(this);
}
</span></span>
这里的onEnter函数中设置了输入框的Delegate。