游戏开发时地型的交界处是怎么处理的?
第一次开发一个基于 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我想到的有两种方法:
按你的想法在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]
]
我自己做的话就会利用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
这个函数很巧,通过检测对角方向来检查障碍,而不是直接检测东西南北四向。