zoukankan      html  css  js  c++  java
  • cocos2dx与cocos2diphone+objc的区别

    cocos2d-x是由国内一个团队,将objc语言的cocos2d引擎翻译到c++语言,以实现了跨平台功能。但是由于c++和objc在一些地方有细微的差别,因此导致了cocos2d-x与cocos2d相比也出现了一些使用上的不同。一下我将列出自己在开发过程中发现的一些不同点:

    1. CCMutableDictionary<key, CCObject*>与NSMutableDictionary

      CCMutableDictionary是cocos2d-x自己写的一个类,它模仿了NSMutableDictionary。但是它有一点和NSMutableDictionary是不一样的。NSMutableDictionary的setObjectForKey方法,如果发现这个key已经存在于字典中的时候,它会自动用新的object覆盖掉原有的object。而CCMutableDictionary,由于它是使用map实现的字典功能。而在map里面,如果key已存在,是不会用新的object覆盖掉原有object的。由于这一区别不会导致程序编译出错,所以只有在程序运行以后才会发现问题,在使用CCMutableDictionary的时候需要特别注意这一点。

    2. CCArray与NSMutableArray

      CCArray也是cocos2d-x自己写的类。它相当于是objc的NSArray。在cocos2d-x中是没有NSArray的概念的(NSArray和NSMutableArray的唯一区别就是一个不可以改变数组中含有的对象,另一个可以改变)。但是CCArray也有一个小问题。首先,CCArray是不能使用new的方式创建的。其次,使用CCArray::array()创建的数组,即使这个数组已经是当前类的成员变量,也必须要做一次retain,否则的话在创建数组的函数返回的时候,CCArray就会被直接释放掉了。由于这个问题也无法通过编译时候暴露出来,而且在objc中创建自动释放的NSArray类型的成员变量的时候是不需要retain的,所以当我从objc转为使用cocos2d-x的时候,经常会忘记做retain,多次导致了程序在其他函数中使用该成员变量的时候出现错误。

    (待续)

  • 相关阅读:
    1.4 build命令
    2.2-2 文章模块开发【添加文章页面脚本编写】
    2.2-1 文章模块开发 【入口脚本及模板的创建】
    2.1 开始一个项目 【功能梳理】
    [微信小程序]不在以下合法域名列表中
    [微信小程序]swiper保持宽高比
    爸爸一路走好
    LVM日记
    欲玩Discuz_X3.2,无奈不支持php7,再装个php5.3,编译到一半报错
    /sbin/ldconfig: /usr/local/lib64/libstdc++.so.6.0.22-gdb.py 不是 ELF 文件
  • 原文地址:https://www.cnblogs.com/eagley/p/2317270.html
Copyright © 2011-2022 走看看