#碰撞 #aa-bb #物理 #2D物理 #碰撞检测 #2D #简单

resphys

简单的2D AABB仅游戏碰撞检测/解决引擎

1个不稳定版本

0.1.0 2020年9月30日

#2094游戏开发

Apache-2.0

46KB
1K SLoC

Resphys

一个仅支持AABB的简单2D碰撞检测/解决库。主要开发目的是用于我的私人项目和作为学习机会。

当前库仅穿透形状,不修改它们的速度。它的目标不是提供完整的物理模拟,而是提供简单游戏的碰撞检测和解决。

API破坏性更改肯定会发生。该库根本不适合生产。它可能足够用于游戏 jams,但 可能 会有一些错误。所有问题都高度欢迎,包括反馈和错误报告。

物理求解器

物理求解器是物理引擎的组件,用于确定如何执行碰撞解决。它决定了引擎的大部分“感觉”。

使用的求解器非常简单。物体在每个轴上分别移动,先在x轴上,然后在y轴上。

缺点
  • 当速度很高时,“跳过角落”(因为运动是分开的),但这种行为需要非常高的速度才开始,并且可以通过非常简单的子步长来缓解
  • 单个步骤不是很精确,但总体来说仍然足够精确,足以用于许多游戏,并且像上一个问题一样,可以通过子步长来缓解
优点
  • 易于消除所谓的“幽灵碰撞”
  • 有效地解决“子弹穿过纸”的问题(目前仅部分解决,容差比常规离散碰撞检测高两倍)
  • 不需要使用任何真实单位

功能

  • 身体和碰撞器分离(允许使用多个AABB构建身体)
  • 实体碰撞器和传感器
  • [用户体验改进] Body(《BodyDesc》)和Collider》(《ColliderDesc》)构建器
  • 用户提供的元数据
  • 遍历Collider》的接触点
  • 生成Collision》/Overlap》事件
  • Collider》提供碰撞掩码
  • [优化] 广义阶段
  • 查询World》与任意AABB的交集
  • 查询World》与射线的交集(射线投射)
  • [用户体验改进] 界面“简单”版本
  • 瓦片地图集成(可能来自不同的crate)

灵感

这个库的API灵感来源于 nphysicsBox2D,并在一定程度上受到目前新兴的 rapier 的启发。

大多数交点和碰撞算法的实现高度基于 cute_c2

拉取请求

欢迎所有拉取请求,但我希望对您的工作表示应有的尊重,因此如果它对现有功能引入了任何重大更改,请先提交一个问题。

依赖项

~5.5MB
~126K SLoC