前端 - 游戏开发时地型的交界处是怎么处理的?
PHPz
PHPz 2017-04-17 11:17:54
[HTML讨论组]

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

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

PHPz
PHPz

学习是最好的投资!

全部回复(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 这个函数很巧,通过检测对角方向来检查障碍,而不是直接检测东西南北四向。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号