tilemap的
瓷砖地图
瓷砖地图内置易于使用,但不够灵活的Cocos2D-X的工作,你的游戏是否是一个RPG游戏,平台游戏或突围clone.Cocos2D-X支持与开源瓷砖的地图编辑器中创建并保存在TMX格式的地图。
的TMX瓷砖地图格式
cocos2d的支持与瓷砖创建的地图。
瓷砖有2个版本:
- 一个Java应用程序上运行的Mac OS X,Windows和Linux上,这是稳定版本。
- 一个QT(本机)的应用程序,支持几乎所有功能的java版本。 截至撰写本文时,最新的Qt版本是0.4.0,支持的一切,但六边形的地图。
您使用的版本主要是到you.In此外,我们建议使用Qt版本,因为这是从现在开始,瓷砖的发展主线,但有些人喜欢使用的Java版本,因为并不是所有的旧有功能已经完全移植还没有结束。
雷的教程介绍了如何创建一个地图游戏使用瓷砖:
cocos2d的TMX支持以下地图:
取向:
- 正交地图
- 等距地图
- 六角地图(左右。上下边缘的边缘不支持......似乎瓷砖不支持它们)
瓷砖:
- 嵌入式瓷砖不支持(即带有嵌入式图像tilesets)。
- 只有嵌入式tilesets的支持(即嵌入地形设置,而不是它的图像)。
- 1地形设置每一层支持。
层数:
- 你可以有很多层,你想要
- 将代表每一层由CCTMXLayer内部(这是一个子类的CCSpriteSheet)
- 将代表每瓦的CCSprite(其父将CCTMXLayer)
对象组:
- 瓷砖objectGroups的支持
坐标和GID
坐标
瓷砖使用的坐标系统,在一个64×32的地图是:
- (0,0):左上角
- (63,31):右下角
GIDA
瓷砖的GID是瓷砖的全球标识符。 这是一个无符号整数,从1至瓷砖的数量。
如果你有5个不同的地砖,然后:
- GID瓷砖0 1
- GID瓷砖1 2
- GID瓷砖2 3
- 等。
GID 0是用来表示空瓷砖。
如何创建一个TMX节点
1 // create a TMX map 2 CCTMXTiledMap *map = CCTMXTiledMap::create( " TileMaps/iso-test-vertexz.tmx " ); 3 4 addChild(map, 0 , kTagTileMap); 5 6 // All the tiles by default will be aliased. If you want to create anti-alias tiles, you should do: 7 8 // iterate over all the "layers" (atlas sprite managers) 9 10 // and set them as 'antialias' 11 12 CCArray * pChildrenArray = map->getChildren(); 13 14 CCSpriteBatchNode* child = NULL ; 15 16 CCObject * pObject = NULL ; 17 18 CCARRAY_FOREACH(pChildrenArray, pObject) 19 { 20 child = (CCSpriteBatchNode*)pObject; 21 22 if (!child) 23 break ; 24 25 child->getTexture()->setAntiAliasTexParameters(); 26 }
如何获得/添加/删除/修改瓷砖
要取得的瓷砖(CCSprite)目标坐标
1 CCTMXLayer* layer = map->layerNamed( " Layer 0 " ); 2 3 CCSprite *tile0 = layer->tileAt( ccp ( 1 , 63 ));
要取得的瓷砖的GID目标坐标
1 unsigned int m_gid = layer->tileGIDAt( ccp ( 0 , 63 ));
要设置一个新的瓷砖的GID某一坐标
1 layer->setTileGID(m_gid, ccp (( float ) 3 , ( float ) 3 )); 2 3 // To remove a tile at a certain coordinate 4 5 layer->removeTileAt( ccp ( 5 .0 , 5 .0 ) );
迭代层
1 CGSize s = layer->getLayerSize(); 2 3 for ( int x= 0 ; x<s.width;x++) { 4 5 for ( int y= 0 ; y< s.height; y++ ) { 6 7 unsigned int tmpgid = layer->tileGIDAt( ccp (x,y)); 8 9 layer->setTileGID(tmpgid+ 1 , ccp (x,y)); 10 11 } 12 13 }
H2。 z顺序和深度缓冲
信息等距和正交地图都有效。 无效六角形地图
如果你的游戏需要把后面/前面的某些砖精灵小精灵“Y位置(一种常见的场景在等距的地图,在一些正交的地图太),然后你有2个选择:
- 使用OpenGL ES深度缓冲
- 使用多个TMX层和z-顺序
使用深度缓冲液
创建一个2 TMX层的地图,这是非常重要
- 背景层。 例如:草
- 前景层。 例如:树
草层将在后面精灵,所以其vertexZ价值的应该是可能的最低值。 例如:-1000。 树层应该有的瓷砖的不同vertexZ值。 在底部的瓷砖应该有更高vertexZ比瓷砖是在顶部。
所以,为了实现这一目标,你应该这样做:
- 打开瓷砖
- 选择背景层(如:草)
- 瓷砖→图层→图层属性
- 地址:cc_vertexz = -1000
- 选择前景层(例如:树木)
- 瓷砖→图层→图层属性
- 地址:cc_vertexz =自动
例如:
| 等距顶点Ž的例子。 它有2层:“树”和“草”。 使用自动cc_vertex =“树”层。 cc_vertexz = -1000“草”层。 |
| 正交顶点例子。 它有2层:“树”和“草”。 它使用的“树”层cc_vertexz =自动和cc_alpha_func的= 0.5。 cc_vertexz = -1000“草”层。 |
h2.Using多个TMX层和z-顺序
在地图里的每个层被自动分配它自己的Zorder中值,所以也没有必要添加TMX编辑器中的任何层的属性。 添加你的精灵作为一个孩子TMXMap允许你动态地放置层内的地图对象。
1 CCSprite m_tamara = CCSprite ::create(tamara.png); 2 3 CCPoint p = m_tamara->getPosition(); 4 5 p = CC_POINT_POINTS_TO_PIXELS; 6 7 float newZ = -(p.y+ 32 ) / 16 ; 8 9 m_tamara->setVertexZ( newZ );
截图
| 正交地图,3D投影和抗锯齿的瓷砖。 瓦片被“固定”使用的spritesheet定影液工具。 没有文物即使有三维投影和抗锯齿瓷砖的出现 |
| 正交地图。 地图平铺尺寸小于瓷砖 |
| 等轴测图,2D投影和锯齿砖 |
| 六角地图,2D投 |