如何高效实现地图自动拼接功能设置_拼接屏控制软件通用吗

如何高效实现地图自动拼接功能设置_拼接屏控制软件通用吗转自:http://www.gameres.com/491653.html介绍这篇文章提供了一个诸如RPG Maker、星际争霸关卡编辑器的自动拼接功能的算法和数据结构。当地图编辑器提供了这个功能

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

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

转自:http://www.gameres.com/491653.html

介绍

  这篇文章提供了一个诸如RPG Maker、星际争霸关卡编辑器的自动拼接功能的算法和数据结构。当地图编辑器提供了这个功能,能显著加快内容创建的节奏。

  背景

  基于tile的图像现在已经是2d游戏的标志了,因为早期的2D游戏使用有限的tile来表现一个大的2D环境。这很自然地会让图像块状并且重复。但是,高超的图像艺术家会通过巧妙地设计来避免这些问题。
技术干货:如何高效实现地图自动拼接功能 ...

  一个类似的技术需要使用供过渡的tile,比如草地-水,草地-荒漠等如上图所示的块。但是,把这些过渡块手工放置在合适的位置工作量非常大。一个复杂的地图编辑器会允许用户标记哪些块,然后自动混合。

  自动拼接

  大部分自动拼接几何包括14个块,包括内部块和外部块(比如全部是草地和全是水的)、上、下、左、右边界、四个外角以及四个内角。这里的算法还要两个额外的块一共16个。

  这个算法认为一个块是由四象限构成的。每一个象限或者角都属于一方(水或者草地)。所有可能的组合共有2 x 2 x 2 x 2 = 16。这16种组合可用4位的2进制数字b3 b2 b1 b0  来表示。每一位b I 对应一个角的类型。如下图所示,分别对应左上、左下、右上和右下。
技术干货:如何高效实现地图自动拼接功能 ...

 

  使用4位索引,可以按如下排序:
技术干货:如何高效实现地图自动拼接功能 ...

  这个过程也可以反过来,用4位序列来决定角的类型。这在下一节中给出了一个算法。为简便起见,假设地图只有这16种情况,并可用4位序列索引。

  自动拼接算法

  1、当一个新的tile被放置到地图中的时候,可以从它8个邻居的情况来推断它对应的是哪个4位索引

  2、对于4个与新tile共享一条边的4个tile(上下左右),新的4位索引被构建,2位来自新的tile,2位来自与共享边离得远的tile。新的4位索引会有限的让这tile进行过渡

  3、类似的算法也发生在剩下4个块(左上,左下,右上,右下)。

  4、与新块临近的块都已经计算了新的4位索引。
技术干货:如何高效实现地图自动拼接功能 ...

 

  进一步考虑

  除了上面的算法,还有以下问题需要考虑

  边缘块:必须小心处理边缘或者角落的地图,因为他们的周围经常少于8个

  Tile组织:上面的算法假设4位索引直接对应tile索引。如果不是这样或者索引不连续,就需要建立一个图片和4位索引之间的双向查找。

  变种:尽管这样过渡比较光滑了,但是观察者还是能看到重复的图样,可以把一个4位索引对应多个图片来解决这个问题。

  实现

  这篇文章没有理论没有包括任何示例代码,但是读者可以从这个开源地图编辑器tIDE(http://tide.codeplex.com)来研究这个自动拼接算法。
技术干货:如何高效实现地图自动拼接功能 ...

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

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

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


相关推荐

  • Shell脚本编程_shell简单脚本

    Shell脚本编程_shell简单脚本文章目录1.shell概述1.1shell和shell脚本1.2Shell脚本应用场景1.4shell类型1.shell概述1.1shell和shell脚本  shell是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务,在用户和内核之间充当翻译官的角色,是一个命令解释器。KenThompson的sh是第一种UnixShell,WindowsExplorer是一个典型的图形界面shell。  shell脚本(

    2022年9月26日
    0
  • 16进制浮点数的表示方法

    16进制浮点数的表示方法16进制浮点数的表示方法,根据IEEE的标准,分为32位和64位两种,参数分别如下:             符号位     指数位           尾数位           指数偏移量 32位    1[31]    8[23-30]        23[0-22]          127  64位    1[63]    11[52-62]   

    2022年6月22日
    168
  • eclipse中文档注释快捷键_eclipse文档注释

    eclipse中文档注释快捷键_eclipse文档注释Eclipse中的两种注释方法:(1)多行注释(2)单行注释一、多行注释快捷键1:添加注释Ctrl+Shift+/:  添加/**/注释 示例:选中代码块后按下快捷键即可/*floatsize=0.0f;  floatpct=0.0f;  try{size=Float.parseFloat(resInf

    2022年8月15日
    4
  • nmap命令扫描开放端口

    nmap命令扫描开放端口简单举例下,以下的场景,我使用了nmap命令场景1:使用树莓派但是没有显示器,这时候把树莓派接入局域网,通过使用nmap命令扫描局域网内的所有开放端口,分析扫描信息,从而得出树莓派的局域网ip,这时候就可以通过ip连上树莓派了场景2:nmap常被黑客用于分析服务器哪些端口开放,如果无聊我们也可以看下自己的服务器都开放了哪些端口安装nmap命令Mac上安装nmapbrewinst…

    2022年5月28日
    33
  • leetcode-23合并K个升序链表(分治|堆)

    leetcode-23合并K个升序链表(分治|堆)给你一个链表数组,每个链表都已经按升序排列。请你将所有链表合并到一个升序链表中,返回合并后的链表。示例 1:输入:lists = [[1,4,5],[1,3,4],[2,6]]输出:[1,1,2,3,4,4,5,6]解释:链表数组如下:[ 1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到。1->1->2->3->4->4->5->6示例 2:输入:lists = []输

    2022年8月9日
    0
  • Java 中常见的 RPC 协议

    Java 中常见的 RPC 协议hessian(Dubbo使用的是dubbo协议是优化过的hessian协议)thrift(apache提供的跨语言的rpc协议)protobuf(google提供的跨语言的rpc协议)

    2022年5月12日
    38

发表回复

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

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