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

cocos2d-x学习笔记

发布时间:2020-12-14 19:00:02 所属栏目:百科 来源:网络整理
导读:印象笔记链接: http://app.yinxiang.com/l/AAXdkdFkFV1L-Y6jsHAGUegJenwyqPc9SzQ/ 印象笔记搬运: cocos2d::Vector 1、底层实现是用std::vector 随机访问O(1) 将元素插入到尾部或者删除尾部的元素,O(1) 随机插入或删除O(n) 2、T必须是继承自Cocos2d::objec

印象笔记链接:

http://app.yinxiang.com/l/AAXdkdFkFV1L-Y6jsHAGUegJenwyqPc9SzQ/



印象笔记搬运:


cocos2d::Vector

1、底层实现是用std::vector
随机访问O(1)
将元素插入到尾部或者删除尾部的元素,O(1)
随机插入或删除O(n)

2、T必须是继承自Cocos2d::object类型的指针,因为已经将cocos2d-x的内存管理模型集成到了Cocos2d::Vector<T>
3、内存管理
警告 cocos2d::Vector<T> 并不是 cocos2d::Object 的子类,所以不要像使用其他cocos2d类一样来用retain/release和引用计数内存管理

4、使用
(1)警告: 并没有重载[]操作,所以不能直接用下标[i]来获取第i位元素。
5、
  • 考虑基于栈的cocos2d::Vector<T>优先用于基于堆的
  • 当将cocos2d::Vector<T>作为参数传递时,将它声明成常量引用:const cocos2d::Vector<T>&
  • 返回值是cocos2d::Vector<T>时,直接返回值,这种情况下编译器会优化成移动操作。
  • 不要用任何没有继承cocos2d::Object的类型作为cocos2d::Vector<T>的数据类型。

cocos2d::Map

  • cocos2d::Map<K,V>()作为参数传递时,将它声明为常量引用const cocos2d::Map<K,V>()&
  • V类型必须为cocos2d::Object的子类指针,不能用其他的类型包括基本类型。
  • cocos2d::Value
    cocos2d::Value 底层用一个统一的变量来保存任意基本类型值
    注意 不能像其它cocos2d类型一样使用retain/release和refcount内存管理
    CCArray
    remove和fastRemove有什么区别,可以看看源代码,remove是从CCArray中完全的移除,fastRemove只是将CCArray中对应的对象释放掉了,没够改变整个CCArray的结构。从代码上来看,区别在于删除元素之后,是否把数组之后的元素向前移动覆盖掉之前位置的元素。 代码上的差别如下所示:

    重点:内存管理

    Cocos2d-x中的引用计数(Reference Count)和自动释放池(AutoReleasePool)

    使用静态构造函数

    CCSprite::create(“player.png”)是一个使用静态构造函数的例子。所以在Cocos2d-x中所有的类,除了单例,都提供了静态构造函数,这些静态构造函数包含下面4项操作:

    1. 新建一个对象

    2. 调用object->init(…)

    3. 假如初始化成功,例如,成功的找到纹理文件,那么接下来将会调用object->autorelease()。

    4. 返回这个已经被标记了autorelease的对象。
    如果一个用静态构造函数创建的指针对象要在全局使用 那么要加上retain 并且在析构函数的地方加上 release()

    (编辑:李大同)

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

      推荐文章
        热点阅读