赞
踩
今天用cocos2d-1.0.1-x-0.9.2来测试tiled map的功能,结果发现翻转过的tile都不见了,调试代码发现原来代码里不支持,没有对x,y翻转作处理,结果翻转过的tile导致数值多大没有被现实出来。
( 注:最新的Tiled map已经支持flip x和flip y,选中tile按键盘上x键,y键即可,其他旋转功能他们正在添加中。。。最新版本可以从http://www.mapeditor.org/下载)
修改代码实现此功能, CCTMXLayer.cpp文件里针对appendTileForGID方法作出修改,上代码:
- // used only when parsing the map. useless after the map was parsed
- // since lot's of assumptions are no longer true
- CCSprite * CCTMXLayer::appendTileForGID(unsigned int gid, const CCPoint& pos)
- {
- //lancer add for tile flip //setFlipX
- int flip = gid>>28;
- int tileid = gid &0x0FFFFFFF;
- gid = tileid;
- //end
-
- CCRect rect = m_pTileSet->rectForGID(gid);
- rect = CCRectMake(rect.origin.x / m_fContentScaleFactor, rect.origin.y / m_fContentScaleFactor, rect.size.width/ m_fContentScaleFactor, rect.size.height/ m_fContentScaleFactor);
-
-
- int z = (int)(pos.x + pos.y * m_tLayerSize.width);
-
-
- if( ! m_pReusedTile )
- {
- m_pReusedTile = new CCSprite();
- m_pReusedTile->initWithBatchNode(this, rect);
- }
- else
- {
- m_pReusedTile->initWithBatchNode(this, rect);
- }
-
-
- m_pReusedTile->setPosition(positionAt(pos));
- m_pReusedTile->setVertexZ((float)vertexZForPos(pos));
- m_pReusedTile->setAnchorPoint(CCPointZero);
- m_pReusedTile->setOpacity(m_cOpacity);
-
-
- //lancer add for tile flip //setFlipX
- cocos2d::CCLog("---gid=%d, flip sign=%d, tileid=%d\n", gid, flip, tileid);
- #define TILE_FLIP_X 8
- #define TILE_FLIP_Y 4
- if(flip & TILE_FLIP_X){
- cocos2d::CCLog("set flip x\n");
- m_pReusedTile->setFlipX(true);
- }
- if(flip & TILE_FLIP_Y){
- cocos2d::CCLog("set flip y\n");
- m_pReusedTile->setFlipY(true);
- }
- //end
-
-
- // optimization:
- // The difference between appendTileForGID and insertTileforGID is that append is faster, since
- // it appends the tile at the end of the texture atlas
- unsigned int indexForZ = m_pAtlasIndexArray->num;
-
-
- // don't add it using the "standard" way.
- addQuadFromSprite(m_pReusedTile, indexForZ);
-
-
- // append should be after addQuadFromSprite since it modifies the quantity values
- ccCArrayInsertValueAtIndex(m_pAtlasIndexArray, (void*)z, indexForZ);
-
-
- return m_pReusedTile;
- }
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。