模仿球球大作战
在一个大小为 1000×1000 的地图中,有 1W 个食物需要判断是否能被吃掉。游戏采用帧同步设计(帧数 40),如果每帧都对全部食物进行搜索,耗时会非常可观。为此引入网格划分,大幅减少每次搜索的候选数量。
将地图暂且划分为 10×10 的网格,理论上每个网格只包含约 100 个食物,计算量因此大幅降低。
具体做法是:以玩家坐标和半径构成一个正方形,取正方形的 8 个顶点,求出这 8 个点各自所在的格子,再将这些格子中的所有食物选出来参与碰撞判断。
下面是粗略实现的代码:
书山有路勤为径