瓦片地图拼接_开源瓦片地图

瓦片地图拼接_开源瓦片地图瓦片地图(TiledMap)瓦片地图(TileMap)不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏,平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器TiledMapEditor生成并保存为TMX文件格式,被Cocos2d-x支持。TMX瓦片地图格式Cocos2d支持被Tiled创建的地图文件(TMX)。Tiled的2个版本…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

瓦片地图(Tiled Map)

瓦片地图(Tile Map) 不但生成简单,并且可以灵活的用于Cocos2d-x引擎。不论你的游戏是角色扮演游戏, 平台动作游戏或仿打砖块游戏,这些游戏地图可以使用开源的瓦片地图编辑器Tiled Map Editor生成并保存为TMX文件格式,被Cocos2d-x支持。

TMX 瓦片地图格式

Cocos2d 支持被Tiled创建的地图文件(TMX)。

Tiled 的2个版本:

Java版较为稳定,可以在Mac OS X, Windows 以及Linux运行。

QT(native)版本支持绝大多数Java版本的功能。在此帮助文档建立时,最新的QT版本为0.4.0并支持除六边形地图(hexagonal maps)以外的所有功能。

开发者可以自由的选择使用Tiled的两种不同版本,我们建议你使用Tiled团队主要开发的QT版本以保证你获得最好的支持及更新。但因为目前Java版一些特性还未完全移植到QT版本中,一些开发者仍然喜欢使用Java版本的Tiled。

【Ray教程】 如何使用Tiled工具建立地图:

Cocos2d supports the following TMX maps:(Cocos2d 支持如下TMX地图形式)

地图定向( Orientation):Orthogonal maps 直角鸟瞰地图(90°地图)

Isometric maps  等距斜视地图(斜45°地图)

Hexagonal maps  六边形地图 ( 左右或上下边界的六边形地图不被Tiled支持)(edges on left-right. edges at top-bottom are not supported… it seems that Tiled doesn’t support them either)

地图形式(Tiles):被嵌套的瓦片地图不被支持(如 使用瓦片素材组与其他图片)

仅支持封装瓦片地图组(仅有瓦片素材组被导入地图文件)

每个Layer最多支持1套瓦片素材组。

地图层(Layers):Tiles中Layer的数量没有上限。

每一个Layer可以被CCTMXLayer类表示( 为CCSpriteSheet的子类)

每一个单一的瓦片被CCSprite表示(父节点为CCTMXLayer)

对象组 (Object Groups):瓦片地图支持对象组

坐标(Coordinates) 和 全局标识(GIDS)

坐标

64*32的Tiled瓦片地图文件的坐标系统为:(0,0): 左上角

(63,31): 右下角

0256154qn.jpg

全局标识(GIDS)

瓦片的GID是一个全局标识量,他的范围从正整数1开始,到瓦片地图中tile的总量。

025617JFk.jpg

如果你的地图中有5个不同的瓦片,那么:瓦片0的GID为1

瓦片1的GID为2

瓦片3 的GID为3

以此类推

瓦片的GID 为 0 被用来表示此瓦片为空。

如何建立一个TMX节点

// create a TMX mapCCTMXTiledMap*map=CCTMXTiledMap::create(“TileMaps/iso-test-vertexz.tmx”);addChild(map,0,kTagTileMap);// All the tiles by default will be aliased. If you want to create anti-alias tiles, you should do:// iterate over all the “layers” (atlas sprite managers)// and set them as ‘antialias’CCArray*pChildrenArray=map->getChildren();CCSpriteBatchNode*child=NULL;CCObject*pObject=NULL;CCARRAY_FOREACH(pChildrenArray,pObject){child=(CCSpriteBatchNode*)pObject;if(!child)break;child->getTexture()->setAntiAliasTexParameters();}

如何获取/添加/删除/修改一个瓦片

指定坐标获取Tile:

CCTMXLayer*layer=map->layerNamed(“Layer 0”);CCSprite*tile0=layer->tileAt(ccp(1,63));

指定坐标获取GID

unsignedintm_gid=layer->tileGIDAt(ccp(0,63));

指定坐标设置一个新的GID

layer->setTileGID(m_gid,ccp((float)3,(float)3));// To remove a tile at a certain coordinatelayer->removeTileAt(ccp(5.0,5.0));

遍历Layer中的瓦片

CGSizes=layer->getLayerSize();for(intx=0;xtileGIDAt(ccp(x,y));layer->setTileGID(tmpgid+1,ccp(x,y));}}

Z序列和深度缓冲

以下信息仅针对俯视地图( Orthogonal)和斜视地图(Isometric)。对六边形地图(Hexagonal)无效。

如果你的游戏需要根据精灵的Y坐标把精灵放置到一些特定瓦片的前面或后面(在斜视地图中常见,同时出现在一些俯视地图中),那么你有2个选择:使用OpenGL ES 深度缓冲

使用多Layer的TMX设置Z序列

深度缓冲(Depth Buffer)

建立一个含有至少2个TMX Layer层的瓦片地图很重要:一个背景层,例如草地

一个前景层,例如树木

025618SB8.jpg

草地层会显示在精灵之后,所以他的z序列应该为最小的值,例如-1000. 树木层中的每一个单一瓦片应该有不同的Z序列值,在底部的瓦片的Z序列应该大于顶部的瓦片序列。

0256193Un.jpg 

025619D8m.jpg

因此,为了实现分层显示,你只需要做如下步骤:打开Tiled编辑器

选择背景层(如草地)

选择 Tiled → Layer → Layer Properties  设置Layer的属性

添加: cc_vertexz = -1000

选择前景层(如草地)

选择 Tiled → Layer → Layer Properties

添加 cc_vertexz = automatic 让其根据坐标自动排Z序列。

范例:

斜视地图Z顶点范例。 地图有2个层,”树木“层和”草地“层。 对“树木”设置属性 cc_vertex=automatic。然后对“草地”层添加 cc_vertexz=-1000。

0256201sn.jpg

俯视地图Z顶点范例。 地图同样有2个层,”树木“层和”草地“层。对“树木”设置属性 cc_vertexz=automatic 并且cc_alpha_func=0.5。 然后对“草地”层添加属性cc_vertexz=-1000。

025621fbo.jpg

使用多层TMX地图和Z序列

在TXM地图中,每一个层(Layer)都被自动赋值了一个Z序列(zOrder),因此不需要添加任何层的z序列属性在TMX编辑器中。将你的精灵添加为TXMMap的子节点可以让你自动的替换当前Layer上的对象。

CCSpritem_tamara=CCSprite::create(tamara.png);CCPointp=m_tamara->getPosition();p=CC_POINT_POINTS_TO_PIXELS;floatnewZ=-(p.y+32)/16;m_tamara->setVertexZ(newZ);

025622I90.jpg

屏幕截图

俯视地图用了3D的投影和抗锯齿瓦片,瓦片被spritesheet-fixer工具处理过,使用3D投影和抗锯齿也不会有人为变化的痕迹。

025623OkY.jpg

俯视地图,地图上瓦片尺寸小于实际瓦片大小。

025624TyG.jpg

斜视地图 2D投影与抗锯齿瓦片

025625X7Y.jpg

六边形地图,2D投影和抗锯齿瓦片。边界界定为瓦片的左右边界。以上下为边界的界定暂不支持。

0256276fa.jpg

参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201133.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 语义分割(Semantic Segmentation)方法「建议收藏」

    语义分割(Semantic Segmentation)方法「建议收藏」翻译来自:https://gist.github.com/khanhnamle1994/e2ff59ddca93c0205ac4e566d40b5e88语义分割方面的资源:https://github.com/mrgloom/awesome-semantic-segmentation1.什么是语义分割语义分割是当今计算机视觉领域的关键问题之一。从宏观上看,语义分割是一项高层次的任务,…

    2022年6月8日
    27
  • fastJson注解@JSONField指定字段的顺序「建议收藏」

    使⽤ordinal指定字段的顺序publicclassBasePackage{@JSONField(ordinal=1)privateintid;@JSONField(ordinal=2)privateintdirection;@JSONField(ordinal=3)privateStringtyp…

    2022年4月9日
    325
  • 理解class.forName()

    理解class.forName()

    2021年12月7日
    37
  • bzero 和memset的区别[通俗易懂]

    bzero 和memset的区别[通俗易懂]bzero  原型:externvoidbzero(void*s,intn);  用法:#include  功能:置字节字符串s的前n个字节为零且包括‘\0’。  说明:bzero无返回值,并且使用strings.h头文件,strings.h曾经是posix标准的一部分,但是在POSIX.1-2001标准里面,这些函数被标记为了遗留函数而不推荐使用。在P

    2022年10月13日
    6
  • 回溯法之n皇后问题总结_用回溯法求解n皇后问题的思路

    回溯法之n皇后问题总结_用回溯法求解n皇后问题的思路一、问题在nxn格的棋盘上放置彼此不受攻击的n格皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nxn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。二、算法与分析用数组x[i](1≤i≤n)表示n后问题的解。其中x[i]表示皇后i放在棋盘的第i行的第x[i]列。由于不允许将2个皇后放在同一列,所以解向量中的x[i]…

    2022年9月30日
    5
  • kali linux 使用教程_kali linux安装软件

    kali linux 使用教程_kali linux安装软件kali-linux激活成功教程wif密码教程kali-linux激活成功教程wif密码教程一.需要准备:(1)安装VMwareWorkstation虚拟机。(2)安装kali-linux系统。(3)准备网卡二.开始激活成功教程(1)插上无线网卡(2)输入ifconfig查看网卡信息,出现wlan0说明连接成功(3)输入airmon-ngstartwlan0开启网卡监听模式(4)输入iwconfig命令查看网卡信息(5)输入airodump-ngwlan0mon(6)数据抓取===操作步骤===(7)解压kali自带的字

    2022年10月8日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号