游戏开发时地型的交界处是怎么处理的?

第一次开发一个基于 Web 的游戏,遇到一个问题:

假设地图是从一个 JSON 文件中得到的,为了简化问题,只有陆地水面两种地型。
示例:

[
    [0, 0, 0, 0, 0, 0],
    [0, 0, 1, 1, 0, 0],
    [0, 0, 1, 1, 0, 0],
    [0, 0, 1, 1, 1, 0],
    [0, 0, 0, 0, 0, 0]
]

0 表示水面,1 表示陆地,那交界处应该是前端去判断 1 的上下左右是否有 0,还是说地图里使用 0.5 来表示交界呢?

如果是前端去判断,那有些什么方便的算法吗?

阅读 4k
2 个回答

我想到的有两种方法:

  1. 按你的想法在Mat中把边界标出来,但是光标出0.5是不够的,因为边界会需要8个不同方向的边界的状态,再加上全水全路的状态,一共10种,下面按0-9编码(0是水,5是陆,其余是边界):
    [
    [0, 0, 0, 0, 0, 0],
    [0, 7, 8, 8, 9, 0],
    [0, 4, 5, 5, 6, 0],
    [0, 1, 2, 2, 3, 0],
    [0, 0, 0, 0, 0, 0]
    ]

  2. 我自己做的话就会利用HTML5的特性,比如说水的Alpha值调整到0.5,然后水陆的margin都稍稍加大让他们互相重叠。这样的话水的蓝色半透明在白色背景下就是蓝色,在陆地的黄色背景下就会显示出边。
    这样的好处是可以使用单一0、1描绘地图,而且0、1的Matrix很适合做状态压缩。
    PS:状态压缩:
    [
    [0,0,0],
    [0,1,1], => 000011011 = 27
    [0,1,1],
    ]

推荐你看看 Tile based games 这个系列;

Hit the wall 这一小节介绍了区块可行走判断的逻辑,getMyCorners 这个函数很巧,通过检测对角方向来检查障碍,而不是直接检测东西南北四向。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题