Cocos2d—X游戏开发之TiledMap的几点注意问题

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游戏

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投
- See more at: http://translate.googleusercontent.com/translate_c?depth=1&hl=zh-CN&prev=/search%3Fq%3Dcocos2d:%2BTMX%2BFormat:%2BUnsupported%2Borientation:%26newwindow%3D1%26safe%3Dstrict%26sa%3DX%26biw%3D1366%26bih%3D578&rurl=translate.google.com.hk&sl=en&u=http://www.cocos2d-x.org/wiki/TileMap&usg=ALkJrhgTcMXMtMyBlAgXsGmRvqfGRwdcaA#sthash.OPOgFqhT.dpuf
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值