关于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;
} 
时间: 2024-08-03 07:07:12

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

Cocos2d-x3.0 捕捉Android的菜单键和返回键

原文地址:http://blog.csdn.net/qqmcy/article/details/26172665 .h void onKeyReleased(EventKeyboard::KeyCode keycode, Event* event); .cpp   注册返回键监听 // // PrograssScene.cpp // SJKB // // Created by 杜甲 on 14-5-5. // // #include "PrograssScene.h" #include

ionic框架对Android返回键的处理

在HybridApp移动跨平台开发中,android平台会遇到一些比较特殊并难以解决的问题,这些问题在原生应用开发中很easy, Android的返回键处理就是问题之一,假如我们要实现一个在很多App中都有的在主页按返回键弹出对话框提示用户退出应用的功能,在原生应用开发中是很容易的,只要在onKeyUp事件里面对返回键事件进行处理就可以了.按2次返回键退出应用的Java代码如下: private long exitTime = 0; @Override public boolean onKeyD

android开发中,两个按下手机实体返回键,两个Activity反复来回跳转的问题

android开发中,对于用intent实现跳转的Ativity,有时候按下手机的返回键时,两个Activity之间会多次相互跳转,始终退出不了程序的情况.这是由于从Activity  A跳转到Activity  B时,A被压入Activity栈中:当从B返回时,默认又重新创建了一个Activity A对象,这样一来就有了多个Activity A对象.所以造成了无法退出情况. 解决办法是:在AndroidManifest.xml文件中找到Activity A项,在其属性中加入  android:

Android 设置系统的返回键 和软键盘获取焦点问题

很多朋友出现过这样的一个问题,当底部弹出评论框时,有几个问题,一个是软件盘弹出时怎么让焦点在输入框,关于这个问题,本人也是遇到过,解决了很久,有的是在布局设置或者代码里setFocusable(true),并没有用,又在代码或者代码里设置requestFocus(),依然没有用,其实这个解决办法是没有错的,但是为什么会没用呢,因为并没有及时是在软件盘弹出时设置,所以先提出隐藏和显示软件盘的方法 private void onFocusChange(boolean hasFocus) { fina

Tabactivity 返回键失效

当我们的Activity继承了TabActivity,在该类中重写onKeyDown是监听不到返回键的, 具体解决方法如下: 重写dispatchKeyEvent /** * 退出 */ @Override public boolean dispatchKeyEvent(KeyEvent event) { if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN

Android监听返回键

android开发中,对返回键事件的监听是要经常用到的,下面以一个例子来演示一下android对返回键的事件监听. public class BackKeyTest extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); se

android webview点击返回键返回上一级activity

android webview点击返回键返回上一个activity 1 @Override 2 public boolean onKeyDown(int keyCode, KeyEvent event) { 3 // TODO Auto-generated method stub 4 if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 5 return true; 6 } 7 return super

quick-cocos2d-x android返回键监听并实现原生退出对话框

这两天终于闲了一下,就顺手又把quick捡起来又学了学,一直都觉得quick比cocos2dx那套lua绑定要方便许多,今天试了下android返回键的监听,还是挺好弄的,所以就有了这篇. 首先说明一下使用的quick版本--2.2.5. 直接上代码 function MainScene:addBackEvent() if device.platform == "android" then self.touchLayer = display.newLayer() self.touchL

按下返回键,提示消息是否退出程序

@Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        //判断是否按下返回键,event.getRepeatCount() == 0为防止点击的过快        if(keyCode==KeyEvent.KEYCODE_BACK&&event.getRepeatCount()==0){            dialog();        }        return true;