cocos2dx 3.2 解决输入框(TextField,TextFieldTTF) 中文乱码问题

近期开发cocos2dx 项目,做一个小游戏。(个人喜欢用最新版本号)

没系统学习就是问题多多,遇到了非常多问题,比方全部的opengl api都必须在主线程中调用,

这让我在多线程载入方面吃了不少亏,浪费了非常多时间。

这次遇到了输入框中输入中文出现乱码问题。搜索了非常多方法,都没找到。没办法。可是知道cocos2dx 2.x版本号没有这个问题,所以就仅仅有跟进代码了。

首先 找到2.x中找到WM_CHAR的派发消息:

在platform/win32/下的CCEGLView.cpp
中 LRESULT CCEGLView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)里面能够找到,

不说了,直接贴代码:

case WM_CHAR:
        {
            if (wParam < 0x20)
            {
                if (VK_BACK == wParam)
                {
                    CCIMEDispatcher::sharedDispatcher()->dispatchDeleteBackward();
                }
                else if (VK_RETURN == wParam)
                {
                    CCIMEDispatcher::sharedDispatcher()->dispatchInsertText("\n", 1);
                }
                else if (VK_TAB == wParam)
                {
                    // tab input
                }
                else if (VK_ESCAPE == wParam)
                {
                    // ESC input
                    //CCDirector::sharedDirector()->end();
                }
            }
            else if (wParam < 128)
            {
                // ascii char
                CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1);
            }
            else
            {
                char szUtf8[8] = {0};
                int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL);
                CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen);
            }
            if ( m_lpfnAccelerometerKeyHook!=NULL )
            {
                (*m_lpfnAccelerometerKeyHook)( message,wParam,lParam );
            }
        }
        break; 

如上:最重要的出现了,

else if (wParam < 128)
            {
                // ascii char
                CCIMEDispatcher::sharedDispatcher()->dispatchInsertText((const char *)&wParam, 1);
            }
            else
            {
                char szUtf8[8] = {0};
                int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&wParam, 1, szUtf8, sizeof(szUtf8), NULL, NULL);
                CCIMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen);
            } 

在这里我们能够依稀看到,中文乱码处理方式:

好了,进入我们3.2版本号里面:

首先看主注冊消息事件開始处:

在GLView::initWithRect中:

glfwSetMouseButtonCallback(_mainWindow,
GLFWEventHandler::onGLFWMouseCallBack);

glfwSetCursorPosCallback(_mainWindow, GLFWEventHandler::onGLFWMouseMoveCallBack);

glfwSetScrollCallback(_mainWindow, GLFWEventHandler::onGLFWMouseScrollCallback);

glfwSetCharCallback(_mainWindow, GLFWEventHandler::onGLFWCharCallback);

glfwSetKeyCallback(_mainWindow, GLFWEventHandler::onGLFWKeyCallback);

glfwSetWindowPosCallback(_mainWindow, GLFWEventHandler::onGLFWWindowPosCallback);

glfwSetFramebufferSizeCallback(_mainWindow, GLFWEventHandler::onGLFWframebuffersize);

glfwSetWindowSizeCallback(_mainWindow, GLFWEventHandler::onGLFWWindowSizeFunCallback);

上面红色就是我们想要的:

进入GLFWEventHandler::onGLFWCharCallback,在跟进: _view->onGLFWCharCallback(window,
character);

ok:我们进入最关键地点:直接贴代码:

void GLView::onGLFWCharCallback(GLFWwindow *window, unsigned int character)
{
	IMEDispatcher::sharedDispatcher()->dispatchInsertText((const char*)&character, 1);
}

是不是跟2.x 里有相似地方呢?

对,我们就使用2.x
来处理中文乱码问题,废话不多说,直接看结果

void GLView::onGLFWCharCallback(GLFWwindow *window, unsigned int character)
{
	if (character < 128)
		IMEDispatcher::sharedDispatcher()->dispatchInsertText((const char*)&character, 1);
	else
	{
		char szUtf8[8] = { 0 };
		int nLen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)&character, 1, szUtf8, sizeof(szUtf8), NULL, NULL);
		IMEDispatcher::sharedDispatcher()->dispatchInsertText(szUtf8, nLen);
	}
}

ok,完毕!就是这么简单,如今能够试下了,支持中文输入法(主要用于windows平台)

事实上就一步:在3.x中收索

GLView::onGLFWCharCallback

然后加入以上函数内容,即搞定。

学习交流!!!紧供參考

时间: 2024-10-02 11:23:03

cocos2dx 3.2 解决输入框(TextField,TextFieldTTF) 中文乱码问题的相关文章

cocos2dx 3.x 解决输入框(TextField,TextFieldTTF) 输入中文变乱码的问题

修改cocos2d-x-3.x\cocos\2d\platform\desktop\CCGLView.cpp    GLView::onGLFWCharCallback方法 //原来的方法如下: void GLView::onGLFWCharCallback(GLFWwindow *window, unsigned int character) { IMEDispatcher::sharedDispatcher()->dispatchInsertText((const char*)&char

解决Xshell和vim中文乱码(转载)

From:http://blog.csdn.net/lovey599/article/details/7275403 一般而言,乱码多是由于编码问题引起 的,在windows系统中,大多数情况下中文编码采用的是big5或utf-8两种,但是默认情况下确是big5,如果这样的话,请首先用locale命令查看你linux系统当前语系,执行LANG=zh_CN.big5修改语系.这里以utf8编码为例. 打开一个用utf8编码的中文文件,在vim中,执行:set encoding=utf-8 term

php -- 解决php连接sqlserver2005中文乱码问题(附详细解决方法)

@[email protected]~~ --php5.2 --phpstudy --apache --sqlserver2005 @[email protected]~~问题描述 问题一:php连接sqlsever2005,输入中文,然后查询sqlserver中对应的数据,由于提交中文是UTF-8,而sqlserver的中文为GBK,所以字段无法匹配,没有查询结果. 问题二,php连接sqlsever2005,读取数据表数据,由于中文是UTF-8,而sqlserver的中文为GBK,读出来的中

cocos2dx学习笔记(4)——VS2010中的中文乱码问题

当你想使用中文时,你是否有这样的一个困惑. 把样例中的HelloWorld改成中文的 "你好,世界!". 然后编译运行,发现居然是个乱码!!! 因为cocos2dx中使用的是UTF-8字符集,而VS中确实ANSI. 所以我们需要对其进行字符集转换. 然后纵里寻它求百度,终于找到了解决方案. 一个函数搞定! #include "cocos2d.h" char* toUTF(const char* strGB2312) { int iLen = MultiByteToW

解决jsp中的中文乱码问题笔记

一.JSP页面显示乱码 二.表单提交中文时出现乱码 三.数据库连接 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着您,我现在把我在JSP开发中遇到 的中文乱码的问题及解决办法写出来供大家参考. 一.JSP页面显示乱码 下面的显示页面(display.jsp)就出现乱码: <html> <head> <title>JSP的中文处理</title> <meta http-equiv="Content-Type" con

解决jsp参数传递的中文乱码问题

解决jsp参数传递的中文乱码问题 制作人:全心全意 在jsp页面中,通过参数传递传递中文时,在显示参数值时中文内容变成了乱码.这是因为请求参数的文字编码方式与页面中的不一致造成的,所有的request请求都是ISO-8859-1的,而大多数页面采用的是UTF-8的编码方式.要解决此问题,只要将获取到的数据通过String的构造方法使用指定的编码类型重新构造一个String对象,即可正确地显示出中文信息. 例: 原文地址:https://www.cnblogs.com/zhangquan-yw/p

SpringMVC 解决GET请求时中文乱码的问题

<filter>        <filter-name>CharacterEncoding</filter-name>        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>        <init-param>            <param-name>encoding</param

解决springmvc+mybatis+mysql中文乱码问题【转】

这篇文章主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下 近日使用ajax请求springmvc后台查询mysql数据库,页面显示中文出现乱码 最初在mybatis配置如下 <select id="queryContentById" resultType = "java.lang.String" parameterType="String" >     select t

解决apache+tomcatserver环境中文乱码的问题

在使用apache做转发服务器时,碰到了中文乱码的问题. 说说解决思路: 1.通常乱码是由于编码不统一造成的.所以要先推断是不是由于编码问题造成的,假设是的话,那统一编码就能够去解决. 2.tomcat配置问题. tomcat下的conf/server.xml 两处加上URIEncoding="UTF-8" 例如以下: