cocos2d-x实现文字输入框以及字符串中文字的提取

本文介绍了如何使用Cocos2d-x重写CCTextFieldTTF类,创建一个聊天窗口的文字输入框,并实现超出长度时隐藏文字,以及从UTF8编码的字符串中提取汉字和字符。通过覆盖CCTextFieldDelegate的回调函数,处理键盘事件和文字输入,确保最多输入60个字符。此外,还解决了键盘弹出后无法接收到触摸事件的问题。
摘要由CSDN通过智能技术生成

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。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值