CCActionInterval* CCAnimate::reverse(void) { CCMutableArray<CCSpriteFrame*> *pOldArray = m_pAnimation->getFrames(); CCMutableArray<CCSpriteFrame*> *pNewArray = new CCMutableArray<CCSpriteFrame*>(pOldArray->count()); if (pOldArray->count() > 0) { CCSpriteFrame *pElement; CCMutableArray<CCSpriteFrame*>::CCMutableArrayRevIterator iter; for (iter = pOldArray->rbegin(); iter != pOldArray->rend(); iter++) { pElement = *iter; if (! pElement) { break; } pNewArray->addObject((CCSpriteFrame*)(pElement->copy()->autorelease())); } } CCAnimation *pNewAnim = CCAnimation::animationWithFrames(pNewArray, m_pAnimation->getDelay()); pNewArray->release(); return CCAnimate::actionWithDuration(m_fDuration, pNewAnim, m_bRestoreOriginalFrame); }
CCTMXTilesetInfo * CCTMXTiledMap::tilesetForLayer(CCTMXLayerInfo *layerInfo, CCTMXMapInfo *mapInfo) { CCTMXTilesetInfo *tileset = NULL; //CFByteOrder o = CFByteOrderGetCurrent(); CCSize size = layerInfo->m_tLayerSize; CCMutableArray<CCTMXTilesetInfo*>* tilesets = mapInfo->getTilesets(); if (tilesets && tilesets->count()>0) { CCTMXTilesetInfo *tileset = NULL; CCMutableArray<CCTMXTilesetInfo*>::CCMutableArrayRevIterator rit; for (rit = tilesets->rbegin(); rit != tilesets->rend(); ++rit) { tileset = *rit; if (tileset) { for( unsigned int y=0; y < size.height; y++ ) { for( unsigned int x=0; x < size.width; x++ ) { unsigned int pos = (unsigned int)(x + size.width * y); unsigned int gid = layerInfo->m_pTiles[ pos ]; // gid are stored in little endian. // if host is big endian, then swap //if( o == CFByteOrderBigEndian ) // gid = CFSwapInt32( gid ); /* We support little endian.*/ // XXX: gid == 0 --> empty tile if( gid != 0 ) { // Optimization: quick return // if the layer is invalid (more than 1 tileset per layer) an assert will be thrown later if( gid >= tileset->m_uFirstGid ) return tileset; } } } } } } // If all the tiles are 0, return empty tileset CCLOG("cocos2d: Warning: TMX Layer '%@' has no tiles", layerInfo->m_sName.c_str()); return tileset; }