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


  • 最近在学习的过程中重新整理了一下代码,顺便把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 , const char *, int32_t,int32_t*))dlsym(libFile, dll_fx_list[i]);
            if (ucnv_convert) 
                return true;
        }
        dlclose(libFile);
    }
    return false;
} 

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏肖洒的博客

【python】【Djang】GPS/北斗串口数据实时定位百度地图

本项目为从串口读取GPS/北斗设备接收数据,进行处理后使用百度地图api实时显示定位。

1.3K20
来自专栏非著名程序员

基于开源项目搭建属于自己的技术堆栈

? 在技术面试的时候肯定都会问到使用了哪些第三方框架,为什么使用它而不用其他的。身边朋友就有这样的亲身经历: 面试官:你们项目中加载图片都是用的什么框架? 面...

28170
来自专栏SDNLAB

SDNLAB技术分享(五):浅谈Open vSwitch移植

好了我们开始今天的主题吧!! 前一段时间自己私下一直学习Open vSwitch。起初学习Open vSwitch的目的,只是为了更好的学习OpenFlow协议...

403150
来自专栏Android机动车

我的第一个RN项目——趣闻

之前利用自己的业余时间入门了微信小程序,并写了一个入门项目 我的第一个微信小程序-趣闻 ,整体效果和之前写的 kotlin-android 版的 趣闻 模块和功...

7610
来自专栏达摩兵的技术空间

app中的webview通识篇(上)

如果你还是第一次与app合作开发webview的页面,那么对于如何调试,可能有哪些问题可能是不够了解的。本文尝试性的根据自己的经验给大家一个入门级别的了解,如果...

92520
来自专栏hadoop学习笔记

菜鸟如何使用hanlp做分词的过程记录

最近在学习hanlp的内容,准备在节后看看有没有时间整理一波hanlp分享下,应该还是会像之前分享DKHadoop一样的方式吧。把整个学习的过程中截图在配文字的...

14840
来自专栏高性能服务器开发

libevent源码深度剖析十二 让libevent支持多线程

(1)libevent源码深度剖析一 序 (2)libevent源码深度剖析二 Reactor模式 (3)libevent源码深度剖析三 libevent基本使...

25620
来自专栏Python中文社区

Python 3.6实现单博主微博文本、图片及热评爬取

文章简介 经常刷微博的同学肯定会关注一些有比较意思的博主,看看他们发的文字、图片、视频和底下评论,但时间一长,可能因为各种各样的原因,等你想去翻看某个博主的某...

66060
来自专栏李成熙heyli

从工程化角度讨论如何快速构建可靠React组件

前言 React 的开发也已经有2年时间了,先从QQ的家校群,转成做互动直播,主要是花样直播这一块。切换过来的时候,业务非常繁忙,接手过来的业务比较凌乱,也没有...

27960
来自专栏Material Design组件

Human Interface Guidelines — Custom Keyboards

15230

扫码关注云+社区

领取腾讯云代金券