加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于cocos2dx3.2返回键问题以及ansi转utf8的问题

发布时间:2020-12-14 20:39:17 所属栏目:百科 来源:网络整理
导读:转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog) 最近在学习的过程中重新整理了一下代码,顺便把cocos2dx从3.0升到了3.2。这里记录一下升级过程中的问题。 之所以只升到3.2是因为后面的版本使用了lua5.2,而我还是更喜欢用5.1,而且能继续使
  • 转载请注明出处:帘卷西风的专栏(http://blog.csdn.net/ljxfblog)

  • 最近在学习的过程中重新整理了一下代码,顺便把cocos2dx从3.0升到了3.2。这里记录一下升级过程中的问题。
  • 之所以只升到3.2是因为后面的版本使用了lua5.2,而我还是更喜欢用5.1,而且能继续使用luajit,另外一个原因是因为cocosstudio,3.2后面的版本就导出成csd格式了,我不是很喜欢这种改变,我还是喜欢直接导出json文件,在lua中加载(其实是不想改代码啦。)。个人认为,cocosstudio正在放弃自己的优势,转而向unity3d靠拢,希望搞一个大而全的工具来开发游戏,这是强制改变用户做游戏的方式。很多C/C++程序员之所以不喜欢unity3d就是因为觉得这不是在编程,而cocos2dx则完全是程序员喜欢的方式。好了,个人见解不吐槽了,下面就说这次遇到的两个问题吧。

  • 第一个是关于返回键的问题,最新编出来的的程序,在windows按退格键正常,但是在android发现按返回键没有反应了。查了一些资料原来是响应的键值改变了,3.0之前是具体看代码,比较坑爹。
--注册返回键
function Layer:listenBackspace()
    if self._layer then
        local function onKeyReleased(keyCode,event)
            --3.0版本之前是KEY_BACKSPACE,3.1之后是KEY_BACK 
            if keyCode == cc.KeyCode.KEY_BACK then
                self:onKeyCallback(keyCode)
            end
        end
        local listener = cc.EventListenerKeyboard:create()
        listener:registerScriptHandler(onKeyReleased,cc.Handler.EVENT_KEYBOARD_RELEASED)
        local eventDispatcher = self._layer:getEventDispatcher()
        eventDispatcher:addEventListenerWithSceneGraphPriority(listener,self._layer)
    end
end
  • 第二个问题是中文转码的问题,我之前有一篇博文介绍过。见关于cocos2dx中文转UTF8码的解决方案。最近在我的安卓4.4的手机上,发现转码失败了,中文全部显示一些框框。查了一些资料,原来是因为libicuuc.so库文件里面的函数ucnv_convert_xx的版本变了,具体的版本映射如下:
//android2.1,ucnv_convert_3_8
  //android2.2,ucnv_convert_4_2
  //android2.3,ucnv_convert_44
  //android4.0,ucnv_convert_46
  //android4.0,ucnv_convert_46
  //android4.1,ucnv_convert_47
  //android4.2,ucnv_convert_48
  //android4.3,ucnv_convert_50
  //android4.4,ucnv_convert_51
  • 知道问题后就好解决了,以后出现这个问题也有经验了,在原文的基础上稍微改一下即可。贴上我写的新接口,这样也方便以后扩展。
bool openIcuuc()
{
    void* libFile = dlopen("/system/lib/libicuuc.so",RTLD_LAZY); 
    if (libFile)
    {
        char* dll_fx_list[] = 
        {
            "ucnv_convert_3_8","ucnv_convert_4_2","ucnv_convert_44","ucnv_convert_46","ucnv_convert_47","ucnv_convert_48","ucnv_convert_50","ucnv_convert_51","ucnv_convert_52","ucnv_convert_53"
        };

        for (int i = 0; i < 10; ++i)
        {
            ucnv_convert = (void (*)(const char *,const char *,char *,int32_t,int32_t*))dlsym(libFile,dll_fx_list[i]);
            if (ucnv_convert) 
                return true;
        }
        dlclose(libFile);
    }
    return false;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读