`
wgcode
  • 浏览: 601690 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

地图编辑器对应的地图解析类

阅读更多

原创  地图编辑器对应的地图解析类及教程 

floor中存的直接就是每一块格子的状态,表示能走或者不能走。这些0或者1与每一块网格有对应关系。
位置的确定用公式计算,数组中的位置X  * 格子宽度    数组中的位置Y  *  格子高度/2


那如何解析这些关系到一个逻辑坐标去呢?
我尝试进行修改了其中的01,发现在连续的解析后得到的图像是先排直的,再拍横的,得到的图应该是这样的:

那么这个公式是怎么样的呢?

这个地图有5行,看着这个地图你会想,怎么拼图才能将地图拼出来。再画张图来演示:

从这张图可以看出,拼图时从左到右,从上到下,跟正规的矩形拼图一样,唯一同的是,地图元素与元素之间有重叠,看看第一行和第二行之间,第二行的地图元素会压在第一行的元素上,而第三行的的地图元素则压在第二行的元素上。所以,只要找到正确的公式,你就能正确地设计程序,再来一张图:

图上绿点(是高亮度绿色,不是暗绿色)是每块地图元素的起点,第一行的座标是0,第二行的座标是1,第三行的座标是2,......由这些行位座标决定你的地图元素的起点,从这个规律中看出行位座标0,和行位座标2的横向座标X的起点是一样的是0,行位座标1的起点是向右移半块地图元素。

再从纵向座标找规律,看行位座标0和行位座标2,两块地图元素之间的距离刚好是一块地图元素的高。再看看行位座标0和行位座标1,两块地图元素之间的距离刚好是半块地图元素的高。所以,计算每块地图元素的位置,你的转换显示坐标和逻辑公式刚好是:

logic.y = ( 2 * stage.y ) / TileHeigth;
logic.x = ( stage.x / TileWidth ) - ( logic.y & 1 ) * ( TileWidth / 2 );
stage.x = logic.x * TileWidth + ( logic.y & 1) * ( TileWidth / 2 );
stage.y = logic.y * TileHeigth / 2;
其中TileHeigth和TileWidth是菱形的高和宽,这样你可以再尝试着定义(0,1),(0,2),(0,3)等点,和得到的结果完全一样···


最后,俺不想误人子弟,一点非常非常重要的声明:

重要:

首先以上的公式只适用于Staggered斜45度角地图,而slide,和Diamond形地图,这个公式要稍加修改才能用。

Staggered:

Slide:

Diamond:

而得到的逻辑坐标就是把了斜45度得到的实际坐标么?当然不是···

仔细观察,如果我们想用一个直角的坐标来表示这个地图,那么大家可能开发起来也更加直观一些,看这个坐标表示出来的y轴都是扭曲的用起来实在不爽,那么我们来将它转换到直角坐标,那么再来加上寻路等算法都没有任何难度了,当然论坛里也有其它的教程如Diamond形状的,比较好的比如http://bbs.actionscript3.cn/thread-10747-1-1.html,但是,如果想配合Staggered斜45度角地图来使用的话貌似也不方便,那么我们来转换我们需要的坐标!

首先我们将地图的高进行转换,这个转换主要是将菱形还原成正方形,例如菱形的高宽比是2:1,那么在地图上则需要将地图高度扩大一倍,然后旋转-45度,那么得到对应坐标如下

我们更加仔细的对这个图的坐标进行标注: 
这样看这个地图是不是更加直观了?特别如果是online游戏的话,服务器端的操作也更加方便了,毕竟这个是我们所熟悉的二维直角坐标系,计算等等也最简单了,从刚才上面得到的那个逻辑坐标转换成直坐标应该怎么进行?来看下面的公式:
Direct_X = ( logic.x - logic.y / 2 ) + ( logic.y & 1 ) + Direct_Length;
Direct_Y = ( logic.y / 2 ) + logic.x + ( logic.y & 1 );
想问那个Direct_Length是个什么参数?
仔细观察下,这个Direct_Length应该是上图左上角的黑色区域的等腰三角形的腰宽,如何计算这个值?用以下公式:
Direct_Length = ( row - 1 ) / 2;
row为每行逻辑坐标中每列中含有的元素个数,而这个参数在闪刀浪子地图编辑器中生成的文件中在floor中有注明,大家自己查看;
结合上面的公式我们来总结得出屏幕图像的坐标和直角坐标的直接转换关系(如果你现在的游戏还是2D游戏并并且你希望能转2.5D的话,那么在不改变大部分逻辑的情况下,只改变可视内容就能完成,以下公式可能非常有用:

-----------------------------------------------------------希望的分割线(写给闪刀浪子)----------------------------------------------------------------------------------


给闪刀浪子:

1.这个地图编辑器还有不少问题,比如排布的时候可行走范围在网格层上的编辑鼠标很多时候选中不能···很痛苦

2.导入图元可行走范围的划定非常不人性化,是我方法不对?

3.资源管理和地图管理中拖动编辑能实现么?还有就是缩放问题如果也能解决就完美了!


当然这些都只是希望,我们都知道那个地图编辑器是个demo的版本,如果有正式版本是否可以分享,或者需要付费的怎么收费?很期待呢~

闪刀虽然目前只放出一个demo的版本,但是搜索下他的帖子,不少东西也已经让大家受益不少,非常感谢他!


-----------------------------------------------------------号召的分割线(所有游戏开发者)-------------------------------------------------------------------------------


如果不涉及商业机密,希望大家都能把自己的教程或者作品源码分享出来,为我们共同的游戏事业锦上添花!!

最后送上本例源代码,配套的寻路,深度排序我正在写,等有了结果我会分享的!

祝大家开发顺利,心想事成!

 PointExchange.rar (471 Bytes)

分享到:
评论

相关推荐

    [心得] 闪刀浪子的地图编辑器对应的地图解析类及教程

    虽然具体的内容没有给出,但可以推测博主在文章中详细介绍了使用地图编辑器的经验,可能包括如何创建、编辑地图,以及如何编写或使用地图解析类来读取和处理由编辑器生成的地图数据。 “源码”标签表明这篇心得可能...

    Ddraw的2d地图编辑器

    《Ddraw的2D地图编辑器深度解析》 在计算机图形学领域,2D地图编辑器是游戏开发、模拟环境构建以及地图可视化等应用中不可或缺的工具。本篇文章将聚焦于一个由C++语言编写的,基于Ddraw库的2D地图编辑器,通过深入...

    地图编辑器

    地图编辑器是一款专为页游开发设计的工具,主要用于地图的创建、编辑和管理。它提供了两个核心功能:地图切割和XML生成,使得游戏设计师能够更高效地制作和组织游戏地图资源。 首先,我们来详细了解地图切割功能。...

    [原创]FC专用地图编辑器源代码-在delphi7下通过.zip

    标题中的“[原创]FC专用地图编辑器源代码-在Delphi7下通过.zip”表明这是一个专门为FC(Family Computer,即任天堂红白机)设计的地图编辑器的源代码,且该编辑器是在Delphi 7开发环境中编写的。这个项目可能是由...

    网易西游系列地图提取器 Maptool V1.3

    导出的图片可以用于二次创作,比如制作壁纸、游戏地图编辑或者进行数据分析。 总的来说,Maptool V1.3是网易西游系列游戏的辅助工具,它的出现方便了开发者和玩家对游戏地图资源的获取和利用,增加了游戏的可玩性和...

    WIL 编辑器

    这种文件格式的解析和编辑能力是WIL编辑器的核心功能。 ### 二、编辑器功能 1. **资源查看**:WIL编辑器支持查看WIL文件内的所有资源,包括图片、动画帧序列等,用户可以预览每个资源的原始状态。 2. **资源编辑*...

    Tiled C++ 地图编辑器 Cocos2d-x 支持的地编

    《Tiled C++ 地图编辑器与Cocos2d-x集成详解》 Tiled是一款功能强大的开源C++地图编辑器,专为2D游戏设计,支持多种游戏引擎,其中包括著名的Cocos2d-x框架。它以其直观的界面、灵活的层管理以及丰富的自定义选项,...

    VC++推箱子源代码附地图编辑器.7z

    《VC++推箱子游戏源代码解析与地图编辑器详解》 推箱子是一款经典的逻辑益智游戏,其简单易懂的规则和丰富的关卡设计深受玩家喜爱。本篇将深入探讨一款基于VC++编写的推箱子游戏源代码及其地图编辑器。通过对源代码...

    Cocos2d-x教程视频TMX地图解析

    在游戏开发中,地图编辑器如Tiled可以生成TMX格式的地图文件,它包含了地图的图块、属性和图层信息。使用Cocos2d-x进行游戏开发时,解析TMX文件是将Tiled编辑的地图导入游戏中的关键步骤。这一过程涉及到对TMX文件...

    地图插件(fastadmin地图插件)

    `controller`文件夹则是后端控制逻辑的实现,它可能包含了处理地图相关请求的控制器,如搜索地址、获取地图信息等操作的处理代码。通过HTTP请求,前端与后端进行数据交互,实现地图插件的功能。 总的来说,这个地图...

    CMapEditorCtrl_Src

    《CMapEditorCtrl_Src——地图编辑器控件的源代码解析》 在软件开发中,地图编辑器是一个至关重要的工具,它允许开发者创建、修改和管理地图数据。"CMapEditorCtrl_Src" 提供了实现这一功能的核心源代码,主要包含...

    android RPG地图绘制

    Tiled是一款广泛使用的开源地图编辑器,允许开发者创建多层、多图块的地图,适用于2D游戏。下面我们将深入探讨这一过程。 首先,理解Tiled地图格式是关键。Tiled使用TMX(Tiled Map XML)格式存储地图数据,包括图...

    凯立德配置文件解析

    - **地图信息**:每个城市都有对应的配置,包括地图更新日期、地图版本等,这对于判断是否需要更新地图非常有用。 - **POI(兴趣点)信息**:这些文件可能还包含各种POI的分类、名称和坐标,方便搜索和导航。 ...

    TiledMapInfoExport:将平铺的地图编辑器(TMX)文件信息导出到json文件

    图片中的Json导出结构和最终的结构有区别Update18-06-17增加tmx格式中的ObjectGroup层级导出 (注意: Json格式的地图文件暂不支持)18-04-04修改Json的导出格式去除linkedTileset层级18-03-27增加对tmx格式的地图以及...

    Gmap地图制作

    这通常可以通过NuGet包管理器来实现,搜索"Gmap.NET"并安装对应的包。安装完成后,你可以在设计视图中拖放GmapControl到你的窗体上,然后通过代码设置地图的初始位置和缩放级别。 接下来,我们将讨论如何实现经纬度...

    hge游戏引擎写的地图浏览,

    在游戏开发领域,地图编辑器和地图格式的选择对于游戏的设计和实现至关重要。本篇将详细探讨如何利用开源游戏引擎HGE(Hidden Game Engine)来读取并显示TMX格式的地图文件,以及与之相关的TinyXML解析库的应用。 ...

    凯立德配置文件解析修改器

    凯立德配置文件解析修改器是一款专为凯立德导航系统设计的工具,它能够帮助用户解析、查看和编辑凯立德导航软件的配置文件,从而实现个性化设置和优化导航功能。这款修改器主要适用于对凯立德导航系统有一定了解的...

    火龙SLK地图ID猎手.zip

    SLK(Scripted Localized Knowledge)是魔兽争霸III地图编辑器中的一种数据格式,用于存储游戏内的各种自定义设置,如单位属性、物品属性、触发器等。地图ID是SLK文件中的关键信息,每个ID都对应着地图上的一个特定...

    MAPGIG67图形编辑二次开发源码

    MapGIS6X是一款广泛应用于地理信息系统(GIS)领域的专业软件,它以其强大的地图编辑、数据管理及空间分析功能深受用户喜爱。对于开发者而言,MapGIS6X的二次开发能力尤为重要,因为它允许我们根据特定需求定制功能...

Global site tag (gtag.js) - Google Analytics