Tile Based Engine 中的墙壁自动拼接处理


  基于 Tile 的引擎中重复利用率最高的图素,除了地面就是墙壁了, 大家回想一下 恺撒III 中的修筑城墙, 或是 Simcity2000 中拉扯电线, 道路,每种物体都只有十几种基本的图素来拼接, 而交叉处理都是程序自动选择正确的图素. 假设我们做一个地图编辑器, 这个功能应该也不能少吧:-)

  实际上, 这个问题早在文本模式的程序就已经出现过. 那就是表格线的处理. 文本模式下, 不能绘制直线, 我们需要绘制表格时, 就需要利用 ASCII 字符来拼接出需要的图形. 成功的文本编辑器, 都具有绘制制表线的功能. 其中最需要解决的问题就是表格线交叉时, 如何正确的选择合适的 ASCII 码.

  如果采用多层条件判断是很愚蠢的方法. 最简洁的程序是将拼接用的图素按一定的次序 (序号的 2 进制形式可以反映周围的连接状态) 排列. 然后通过简单的公式计算出正确的元素. 具体就是说, 将上下左右的连接用 4 位 2 进制数表示出来. 通过读取当前图素的上下左右的图素 是否有连接来生成一个数字, 查表得到正确的图素. :-)

  下面附有一个小程序, 可以完成上述的功能, 感兴趣的朋友可以读读 :-)

[相关系列文章]