CCMutableArray已不建议使用,如何更改代码?

3
我正在处理cocos2d-x SimpleGame 项目,卡在第5章,http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Chapter_5_-_How_to_Detect_the_Collisions
我发现 CCMutableArray 被 CCArray 取代了。但我需要如何修改以下内容,才能让它与 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;
     // (...)
  }
  // (...)
}
3个回答

6

我认为这是

CCArray* array1 = CCArray::create();

然后使用它:

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

1
谢谢,那真的很有帮助!而且应该使用new CCArray而不是CCArray::create(),以及使用CCARRAY_FOREACH而不是CCARRAY_FOR_EACH - Ben
1
编辑后,我认为最好使用create()静态方法并保留它,因为对象稍后会自动释放,没有任何问题。如果使用new CCArray(),当您完成使用它时,必须手动释放它。 - m.ding
使用CCArray::create()导致应用程序崩溃,而使用"new CCArray"则正常工作。 - shaikh
1
@Faizan,你不应该使用new来创建数组,而是应该使用CCArray::create()和array->retain()。如果你使用new,就会破坏cocos2d-x的内存管理系统,这意味着你需要手动删除数组。 - m.ding


0

我使用std::list<>代替,效果很好。只需删除一些低效的部分。

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


这是为了将代码从原始的cocos2d-iphone移植过来,使其更加容易。 - m.ding

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接