cocos2dx最近遇到的一些注意点

Bug

  1. Android下异步加载文件的时候会崩溃,CCFileUtils-android.cpp:286
    1
    2
    3
    // Director::getInstance()->getEventDispatcher()->dispatchCustomEvent(EVENT_BEFORE_READ_FILE);
    // 这样修改还是有线程安全的风险,但不会崩溃了
    EngineDataManager::onBeforeReadFile();

注意点

  1. cc.XMLHttpRequest 在ios下对”{}[]”进行了URL转义,会导致服务器无法识别(Java spring可以识别)
  2. 打包资源如果需要修改资源后缀名,那么需要注意Android对assets目录下文件的压缩行为

    1
    2
    3
    4
    5
    6
    7
    8
    9
    /* these formats are already compressed, or don't compress well */
    static const char* kNoCompressExt[] = {
    ".jpg", ".jpeg", ".png", ".gif",
    ".wav", ".mp2", ".mp3", ".ogg", ".aac",
    ".mpg", ".mpeg", ".mid", ".midi", ".smf", ".jet",
    ".rtttl", ".imy", ".xmf", ".mp4", ".m4a",
    ".m4v", ".3gp", ".3gpp", ".3g2", ".3gpp2",
    ".amr", ".awb", ".wma", ".wmv"
    };
  3. 打包资源如果需要修改资源后缀名,那么需要注意像骨骼动画等plist和图片是同一个名字,cocos对这些处理不同平台有不一样的表现

  4. 打包资源如果需要修改资源后缀名,声音文件需要特别注意,cocos不是根据文件头判断当前文件是什么格式,而是通过后缀名
  5. 在cocos内部,加载lua脚本,需要注意是否是重新加载
    1
    2
    3
    4
    # 不会重新加载,需要对package.loadedpackage.preload删除已经加载的模块
    engine->executeString("require 'lobby.main'");
    # 会重新加载
    engine->executeString("require 'lobby/main'");

其他

  1. 网页引用js生效问题
    1
    2
    3
    4
    <!-- 不生效 -->
    <script src="http://cdn.bootcss.com/jquery/1.10.0/jquery.min.js" />
    <!-- 生效 -->
    <script src="http://cdn.bootcss.com/jquery/1.10.0/jquery.min.js"> </script>