CCActionInterval* CCAnimate::reverse(void) { NSMutableArray<CCSpriteFrame*> *pOldArray = m_pAnimation->getFrames(); NSMutableArray<CCSpriteFrame*> *pNewArray = new NSMutableArray<CCSpriteFrame*>(pOldArray->count()); if (pOldArray->count() > 0) { CCSpriteFrame *pElement; NSMutableArray<CCSpriteFrame*>::NSMutableArrayRevIterator iter; for (iter = pOldArray->rbegin(); iter != pOldArray->rend(); iter++) { pElement = *iter; if (! pElement) { break; } pNewArray->addObject((CCSpriteFrame*)(pElement->copy()->autorelease())); } } CCAnimation *pNewAnim = CCAnimation::animationWithName(m_pAnimation->getName(), m_pAnimation->getDelay(), pNewArray); pNewArray->release(); return CCAnimate::actionWithDuration(m_fDuration, pNewAnim, m_bRestoreOriginalFrame); }
CCTMXTilesetInfo * CCTMXTiledMap::tilesetForLayer(CCTMXLayerInfo *layerInfo, CCTMXMapInfo *mapInfo) { CCTMXTilesetInfo *tileset = NULL; //CFByteOrder o = CFByteOrderGetCurrent(); CGSize size = layerInfo->m_tLayerSize; NSMutableArray<CCTMXTilesetInfo*>* tilesets = mapInfo->getTilesets(); if (tilesets && tilesets->count()>0) { CCTMXTilesetInfo *tileset = NULL; NSMutableArray<CCTMXTilesetInfo*>::NSMutableArrayRevIterator 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.name); return tileset; }