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

发布于 2022-08-31 09:24:01 字数 430 浏览 18 评论 0

第一次开发一个基于 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 来表示交界呢?

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你与清晨阳光 2022-09-07 09:24:01

我想到的有两种方法:

  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],
    ]

可是我不能没有你 2022-09-07 09:24:01

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文