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

2024-02-17 22:59

本文主要是介绍闪刀浪子的地图编辑器对应的地图解析类及教程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先多谢闪刀大大分享地图编辑器,对这个编辑器研究了一翻,的确很多地方做得很不错!
在使用过程中,对地图的解析是个很麻烦的工作,在斜45度的地图中(貌似官方术语叫“斜轴视图”),在生成的ini(其实是xml文件)打开后有个叫floor的东西,其实是可行走范围,这个可行走范围是通过什么来设定的呢?之前闪刀大大给过一个公式,具体帖子看http://bbs.actionscript3.cn/viewthread.php?tid=10227
闪刀给的“官方”解释是:
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:

 

-----------------------------------------------------------疲劳的分割线(游戏开发真TM的累)--------------------------------------------------------------------------

 

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

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

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

地图坐标转换2.jpg



我们更加仔细的对这个图的坐标进行标注:

地图坐标转换.jpg



这样看这个地图是不是更加直观了?特别如果是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)

 

 

 

原文:http://bbs.actionscript3.cn/thread-16770-1-1.html

这篇关于闪刀浪子的地图编辑器对应的地图解析类及教程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/719257

相关文章

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

OWASP十大安全漏洞解析

OWASP(开放式Web应用程序安全项目)发布的“十大安全漏洞”列表是Web应用程序安全领域的权威指南,它总结了Web应用程序中最常见、最危险的安全隐患。以下是对OWASP十大安全漏洞的详细解析: 1. 注入漏洞(Injection) 描述:攻击者通过在应用程序的输入数据中插入恶意代码,从而控制应用程序的行为。常见的注入类型包括SQL注入、OS命令注入、LDAP注入等。 影响:可能导致数据泄

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

CSP 2023 提高级第一轮 CSP-S 2023初试题 完善程序第二题解析 未完

一、题目阅读 (最大值之和)给定整数序列 a0,⋯,an−1,求该序列所有非空连续子序列的最大值之和。上述参数满足 1≤n≤105 和 1≤ai≤108。 一个序列的非空连续子序列可以用两个下标 ll 和 rr(其中0≤l≤r<n0≤l≤r<n)表示,对应的序列为 al,al+1,⋯,ar​。两个非空连续子序列不同,当且仅当下标不同。 例如,当原序列为 [1,2,1,2] 时,要计算子序列 [