内容来自RyiSnow视频讲解
玩家地图元素碰撞
这一节实现了,玩家角色与地图上树木、水、墙的碰撞检测,当玩家行走到这样的瓷砖贴图的时候,将不能再继续前进。
在这里,作者的实现是每个方向,判断2个点是否与前进方向的solid tile(固体瓷砖)相撞,如果是则不再继续前进,否则玩家继续前进。
这一节有几个比较重要的地方需要注意:
- 玩家的固体区域(solid area)是一个重要的点,就是用来判断碰撞的区域,或者说,地图中其他元素能感受到的玩家的尺寸大小。最简单的处理方式是,玩家整个大小48x48作为solid area,然而这样就有不合理的敌方,如下图:
看玩家单位位置,明显还能继续向上走,如果使用48x48玩家的总体大小作为玩家的solid area,就无法实现继续向上的效果。因此需要取其中的一部分作为solid area。
当然,还有一个原因,当玩家要通过一个恰好可以容纳他自己通过的入口(48x48)的时候,玩家将很难对准这个入口,以至于要调整很多次才能对准这个入口,只要有1个像素被阻挡也无法通过。
作者的处理方式如下图:红色部分作为solid area就解决了这2个问题。
具体可以参考代码中的处理逻辑,新增了一个碰撞检测类。