Oneshot Gems
立即玩

游戏开发者指南

使用适合形状的最简单的碰撞测试

碰撞检测用于判断游戏对象是否重叠或交叉。最初选用的检测形状通常可以比美术图形简单:网格格子和平台用矩形,圆形角色用圆,不规则障碍物则用少量形状组合。先明确要判断的是接触、进入还是穿过,再选择能稳定回答该问题的测试。规则本身较粗略的游戏通常不需要逐像素检测,因为这会增加复杂度。

本页内容

将测试与规则相匹配

对于轴对齐的矩形,比较每个对象的左、右、上、下边界;只有在两个轴上的区间都相交时才算重叠。对于圆形,比较圆心距离与半径之和。网格游戏可以直接检查两个角色是否占据同一个格子,从而完全避免几何运算。

创建一个包含两个彩色形状的小型诊断场景,并显示选定的碰撞区域。分别测试边缘接触、部分重叠以及擦身而过但未碰撞的情况。明确边缘接触是否算碰撞,并统一采用这一约定,避免移动判定和得分判定互相矛盾。

避免漏掉快速穿越障碍的碰撞

快速移动的物体可能在一次更新时位于薄墙一侧,下一次更新时已经到了另一侧。缩小固定模拟步长可能有帮助,但并非唯一办法:当移动距离相对于障碍厚度很大时,可以测试运动扫掠线段或扩大目标区域。

对于许多对象,首先使用粗网格或空间桶拒绝不能彼此靠近的对,然后对候选对象运行详细的测试。添加该结构之前进行测量;对于几十个实体,直接的配对检查可能更容易维护并且完全足够。

关于⁨游戏碰撞检测⁩的常见问题

碰撞箱需要匹配精灵轮廓吗?

通常不需要。稍微宽松的矩形或圆形碰撞区域会让操作感觉更公平。开发时显示碰撞框,并根据游戏规则和玩家预期调整它们。

Canvas 可以告诉我两个精灵是否发生碰撞吗?

Canvas 提供 isPointInPath() 等路径测试,可检查某个点是否位于绘制路径内,但不会定义通用的游戏对象碰撞规则。应明确设置模拟几何形状,并让它独立于绘图。

延伸阅读

发现信息过时了? 报告需要更正的内容

继续玩下去。

免费浏览器游戏,随时等你开玩。发现喜欢的游戏,让它成为你的下一个最爱。

跟随好奇心探索