Arrays CCArray枚举器对象

Arrays CCArray枚举器对象,arrays,iterator,cocos2d-x,enumerator,Arrays,Iterator,Cocos2d X,Enumerator,据我所知,它并不存在 CCArray *array = CCArray::create(); CCArrayEnumerator *enumerator = array->createEnumerator(); ... CCObject *nextObjectOrNull = enumerator->nextObject(); CCObject *currentObjectOrNull = enumerator->peekCurrent

据我所知,它并不存在

    CCArray *array = CCArray::create();
    CCArrayEnumerator *enumerator = array->createEnumerator();
    ...

    CCObject *nextObjectOrNull = enumerator->nextObject();
    CCObject *currentObjectOrNull = enumerator->peekCurrentObject();

这个类将使我的代码更简单,如果没有人编写它,我将立即执行。但是我还没有发现任何关于这个课程需要的请求或论坛帖子。这很奇怪。

您可以编写自己的代码,但已经有一个宏可以用于相同的操作

以下是伪代码:

CCArray *array = this->getChildren();  

CCObject* currentObject = NULL;  
CCARRAY_FOREACH(array , currentObject )  
{  
    CCNode *node = (CCNode*)currentObject;
}

我写了一个简单的类,它完成了这个任务。欢迎提出建议

CCArrayEnumerator.h:

#include "cocos2d.h"

class CCArrayEnumerator : public cocos2d::CCObject{

public:
    static CCArrayEnumerator* create(cocos2d::CCArray* array);
    cocos2d::CCObject* nextObject();
    cocos2d::CCObject* peekCurrentObject();
private:
    cocos2d::CCArray* _array;
    CCArrayEnumerator();
    ~CCArrayEnumerator();
    virtual bool init(cocos2d::CCArray* array);

    int _currentIndex;
};
CCArrayEnumerator.cpp:

#include "CCArrayEnumerator.h"
USING_NS_CC;

CCArrayEnumerator* CCArrayEnumerator::create(cocos2d::CCArray* array){
    CCArrayEnumerator *pRet = new CCArrayEnumerator();
    if (pRet && pRet->init(array))
    {
        pRet->autorelease();
        return pRet;
    }
    else
    {
        CC_SAFE_DELETE(pRet);
        return NULL;
    }
}

    cocos2d::CCObject* CCArrayEnumerator::nextObject(){
    CCObject *retval = NULL;

    if(_array->count() > _currentIndex + 1){
        _currentIndex++;
        retval = _array->objectAtIndex(_currentIndex);
    }

    return retval;
}

cocos2d::CCObject* CCArrayEnumerator::peekCurrentObject(){
    CCObject *retval = NULL;

    if(_currentIndex != -1 && _array->count() > _currentIndex){
        retval = _array->objectAtIndex(_currentIndex);
    }

    return retval;
}

CCArrayEnumerator::CCArrayEnumerator():
 _array(NULL)
,_currentIndex(-1){

}

CCArrayEnumerator::~CCArrayEnumerator(){
    if(_array){
        _array->release();
        _array = NULL;
    }
}

bool CCArrayEnumerator::init(cocos2d::CCArray* array){

    // Superclass CCObject has no init.

    CCAssert(_array == NULL,"CCArrayEnumerator is already initialized.");

    _array = array;
    _array->retain();

    return true;
}

... 你的问题是什么?