You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

碰撞检测应用方法:对象碰撞时如何触发游戏胜负提示及重启逻辑

2D游戏碰撞检测实现方案

你当前的需求用dist()函数完全可以实现,代码简洁且性能足够支撑普通2D小游戏的运行需求,具体实现逻辑如下:

胜利判定(方块击中圆形)

你需要提前获取四个参数:迷你方块的中心坐标(boxX, boxY)、目标圆形的中心坐标(circleX, circleY)、圆形的半径circleR、迷你方块的半边长boxHalfLen。
每帧调用dist(boxX, boxY, circleX, circleY)计算两个图形中心的距离,只要计算结果小于等于circleR + boxHalfLen,即可判定碰撞命中,触发「game over you win」的屏幕提示即可。

如果你的迷你方块尺寸极小,也可以直接忽略方块半边长,判断距离小于等于circleR即可,代码更简洁,误差对普通小游戏来说几乎不可感知。

失败判定(未击中的圆形进入左侧区域)

  • 给每个圆形对象新增isHit布尔标记位,默认值为false,当圆形被方块击中时将该标记改为true
  • 每帧遍历所有isHit为false的圆形,判断其x坐标是否小于你定义的左侧区域边界值(比如屏幕左边缘可设为0,需要预留判定区域可自定义为50等数值)
  • 只要存在符合条件的圆形,直接触发「you lose」提示,调用游戏重启逻辑重置所有对象状态即可。

性能优化方案

如果你的游戏场景内同时存在大量圆形和发射方块,担心dist()的开根号计算带来性能开销,可以用平方距离对比替代,判定效果完全一致,运算速度更快:
将dist(boxX, boxY, circleX, circleY) <= circleR + boxHalfLen替换为:
(boxX - circleX) * (boxX - circleX) + (boxY - circleY) * (boxY - circleY) <= (circleR + boxHalfLen) * (circleR + boxHalfLen)

内容的提问来源于stack exchange,提问作者user14368147

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:45:07