【问题标题】:CCMutableArray deprecated, how to change codeCCMutableArray 已弃用,如何更改代码
【发布时间】:2012-07-30 21:19:38
【问题描述】:

我正在完成 cocos2d-x SimpleGame 项目,我被困在第 5 章,http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Chapter_5_-_How_to_Detect_the_Collisions

我发现 CCMutableArray 已被弃用,取而代之的是 CCArray。但是我需要如何修改以下内容,以使其与 CCArray (显然不支持模板)一起使用?

HelloWorldScene.h

cocos2d::CCMutableArray<cocos2d::CCSprite*> *_projectiles;

HelloWorldScene.cpp

// in init()
// Initialize arrays
_projectiles = new CCMutableArray<CCSprite*>;

HelloWorld::~HelloWorld()
{
  if (_targets)
  {
    _projectiles->release();
    _projectiles = NULL;
  }
}

HelloWorld::HelloWorld()
:_projectiles(NULL)
{
}

void HelloWorld::update(float dt)
{
  CCArray *projectilesToDelete = new CCArray<CCSprite*>;
  CCMutableArray<CCSprite*>::CCMutableArrayIterator it, jt;

  for (it = _projectiles->begin(); it != _projectiles->end(); it++)
  {
     CCSprite *projectile = *it;
     // (...)
  }
  // (...)
}

【问题讨论】:

    标签: cocos2d-iphone cocos2d-x


    【解决方案1】:

    我觉得是

    CCArray* array1 = CCArray::create();
    

    以后再使用它:

    CCObject* arrayItem;
    CCARRAY_FOREACH(array1, arrayItem){
        CCSprite* pItem = (CCSprite*)(arrayItem);
        //your code here
    }
    

    【讨论】:

    • 谢谢,这真的很有帮助!它是new CCArray 而不是CCArray::create()CCARRAY_FOREACH 而不是CCARRAY_FOR_EACH
    • 已编辑。但我认为使用 create() 静态方法并保留它可能会更好,因为该对象稍后会自动释放而不会出现任何问题。如果使用 new CCArray() 并且当你使用完它时,你必须手动释放它。
    • 使用 CCArray::create() 导致应用程序崩溃,而我使用“new CCArray”工作正常。
    • @Faizan 你不应该。你应该使用 CCArray::create() 和 array->retain()。如果你使用new,你会破坏cocos2d-x的内存管理系统,这意味着你需要手动删除数组。
    【解决方案2】:

    我使用 std::list 代替,它运行良好。 只是删除可能会有些低效。

    我还是 cocos2d-x 初学者,我不知道他们为什么像 CCMutableArray、CCArray... 之类的“重新发明轮子”(仅在我的初学者看来)。

    【讨论】:

    • 那是为了移植原来cocos2d-iphone的代码,方便一点。
    【解决方案3】:
    猜你喜欢
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 2012-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    相关资源
    最近更新 更多