Cocos 2.x TileMap

参考Laya TileMap 系列一 地图编辑器使用基础

一、编辑器版本

TileMap编辑器,建议下载1.2版本的。https://github.com/mapeditor/tiled/releases/tag/v1.2.0
刚开始我下载了1.7版本,cocos会提示:

cocos2d: TMXFormat: Unsupported TMX version: 1.5

至于为什么是1.2,参考官方文档https://docs.cocos.com/creator/manual/zh/asset-workflow/tiledmap.html

瓦片图资源是由 TiledMap 所导出的数据格式(Creator v2.1 及以下支持 TiledMap v1.0.0,Creator v2.2.0 及以上支持 TiledMap v1.2.0)。

另外可参考官方文档:TiledMap 组件参考
https://docs.cocos.com/creator/manual/zh/components/tiledmap.html

二、寻路

参考官方示例改 TiledMap 瓦片地图+寻路,这个帖子提供了正常角度的地图坐标转换。我现在想做斜45度的地图,需要修改坐标转换算法。

三、坐标

参考
笔记:TileMap坐标转换
45度角地图坐标计算
瓦片地图-坐标转换

1.地图类型
image.png

正常

斜45

45度交错

六角交错
  • 所有地图类型的坐标都是格子数,X轴向右增加,Y轴向下增加
  • 正常/45度交错/六角交错地图左上角第一个格子为起始点:(0,0)
  • 45度地图上方顶点第一个格子为起始点:(0,0)
2.坐标系
image.png
  • TileMap坐标:以地图左上角为原点(0,0),X轴向右增加,Y轴向下增加
  • OpenGL坐标:以地图左下角为原点(0,0),X轴向右增加,Y轴向上增加
  • Creator坐标:以节点中心点为原点(0,0),X轴向右增加,向左减少,Y轴向上增加,向下减少
3.引擎提供tiled格式转图层坐标
let Orientation = cc.Enum({
    /**
     * !#en Orthogonal orientation.
     * !#zh 直角鸟瞰地图(90°地图)。
     * @property ORTHO
     * @type {Number}
     * @static
     */
    ORTHO: 0,

    /**
     * !#en Hexagonal orientation.
     * !#zh 六边形地图
     * @property HEX
     * @type {Number}
     * @static
     */
    HEX: 1,

    /**
     * Isometric orientation.
     * 等距斜视地图(斜45°地图)。
     * @property ISO
     * @type {Number}
     * @static
     */
    ISO: 2
});

    /**
     * !#en Returns the position in pixels of a given tile coordinate.
     * !#zh 获取指定 tile 的像素坐标。
     * @method getPositionAt
     * @param {Vec2|Number} pos position or x
     * @param {Number} [y]
     * @return {Vec2}
     * @example
     * let pos = tiledLayer.getPositionAt(cc.v2(0, 0));
     * cc.log("Pos: " + pos);
     * let pos = tiledLayer.getPositionAt(0, 0);
     * cc.log("Pos: " + pos);
     */
    getPositionAt (pos, y) {
        let x;
        if (y !== undefined) {
            x = Math.floor(pos);
            y = Math.floor(y);
        }
        else {
            x = Math.floor(pos.x);
            y = Math.floor(pos.y);
        }
        
        let ret;
        switch (this._layerOrientation) {
            case cc.TiledMap.Orientation.ORTHO:
                ret = this._positionForOrthoAt(x, y);
                break;
            case cc.TiledMap.Orientation.ISO:
                ret = this._positionForIsoAt(x, y);
                break;
            case cc.TiledMap.Orientation.HEX:
                ret = this._positionForHexAt(x, y);
                break;
        }
        return ret;
    },
四、有做大型RPG或SLG游戏需求的朋友请进,有在线地图编辑器

作者QQ583051842
以下为评论区精选:

1.人物移动使用插值

从a点走到b的过程中突然又点击了c点,a到b点的行走被打断,改为当前位置到c点行走,用tween不好控制,而且tween性能消耗大。而插值可以轻松每时每刻的屏幕平滑移动。还有一种情况,arpg游戏,a点走到b点的过程中,角色中了一个晕眩技能,被迫停下,用tween就不好处理了。

2.想问下 如果想在地图上添加NPC 怪物等等 这个可以添加么 然后如何触发事件

在地图上添加怪物和npc可以在cocoscreator里编辑。新建一个场景,把地图底图拉到场景里,然后把怪物和npc根据底图的位置拖放,在把这些怪物和npc一起生成一个预制体。运行游戏时,加载地图的同时顺便把这个预制体加载进来放置在底图上就可以了。

点击事件可以在怪物和npc的节点上添加事件监听

3.点击不能寻路的地方,现在是不会移动,可以改为跑到离这个点,最近的可移动的地方

修复了源代码项目用2.20以上的版本打开,角色动画不能播放的问题,并且添加了点击障碍点也可以行走到最靠近目标点最近的地方的功能

寻路算法添加了可以选择是否优化寻路路径的选项修改一下A*寻路脚本里的optimize属性,true为优化,会把路径里多余的路点清理掉,false为不优化,返回寻路的完整路径

4.大佬 ,地图图片太大了会不会加载慢?

很大的地图, 最好先photoshop把大地图导出一张很小的地图,提前加载到游戏里,并且缩放大小和原始地图一样大小,这样就能作为马赛克地图。然后再用photoshop可以分片切割大图片成很多小图片(如每张256 * 256),玩家走到哪里就加载哪里的小图块,这样就不会影响加载速度了,就算是微信小游戏也能跑。以前网页游戏就是这种做法的

在线编辑器里新增了针对大地图的裁图工具,需要下载使用

5.笔刷

更新了功能,按住shitf拖动鼠标可以加大笔刷范围,按住鼠标“中键”或者“space + 鼠标左键”可以拖曳底图,

6.如果用tilemap那种像素风类型的,似乎不大适用

tilemap是以地砖的方式重复利用资源,优点节省资源大小,缺点画面太单一。我这种是传统的rpg地图原画,优点地图由美术原画自由发挥,画面比较精美。缺点是资源相对地砖地图大很多,不过可以通过切割地图,按视野分块加载地图片,效率不会受影响很多。如果tilemap需要做寻路,我的项目里自带的寻路系统是可以用的。

7.小地图寻路

游戏中点击显示缩略图(一般右上角显示小地图)需显示两点间虚线路线,并自动寻路过去(寻路过程中,缩略图虚线路线逐渐缩短且头像逐渐移动),请问楼主能否指点一下思路

缩略图可以自己用ps按比例缩小出一张小的地图,放在右上角,点击缩略图时,根据点击缩略图的位置按比例转化到场景地图的位置,并寻路到该位置,寻路会得到一条寻路路径,用绘图工具如graphic组件根据玩家行走的位置,再连接剩下没走完的路径,实时绘制就得到你要的结果了

8.请问大佬打开地图时读取本机文件并上传是如何做到的?有相关文档吗?

js配合html标签就可以做得到

五、其它优化

【Tiledmap】斜45度 贴图利用率优化分享

slg系列(地图篇)3d透视无限地图完成……其他补充中..

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容