游戏开发论坛

 找回密码
 立即注册
搜索
查看: 12050|回复: 1

技术干货:如何高效实现地图自动拼接功能

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2016-3-10 10:04:29 | 显示全部楼层 |阅读模式
1503477_162945_8_lit.jpg

  介绍

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

  背景

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

1.png

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

  自动拼接

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

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

2.png

  使用4位索引,可以按如下排序:

3.png

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

  自动拼接算法

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

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

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

  4、与新块临近的块都已经计算了新的4位索引。

4.png
  进一步考虑

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

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

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

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

  实现

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

5.png

  相关阅读AS3地图拼接与战争迷雾的实现

via:GAD

6

主题

130

帖子

932

积分

高级会员

Rank: 4

积分
932
发表于 2016-3-24 19:03:21 | 显示全部楼层
好好。!!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2024-5-20 09:35

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表