1个不稳定版本
0.1.0 | 2020年9月30日 |
---|
#2094 在 游戏开发
46KB
1K SLoC
Resphys
一个仅支持AABB的简单2D碰撞检测/解决库。主要开发目的是用于我的私人项目和作为学习机会。
当前库仅穿透形状,不修改它们的速度。它的目标不是提供完整的物理模拟,而是提供简单游戏的碰撞检测和解决。
API破坏性更改肯定会发生。该库根本不适合生产。它可能足够用于游戏 jams,但 可能 会有一些错误。所有问题都高度欢迎,包括反馈和错误报告。
物理求解器
物理求解器是物理引擎的组件,用于确定如何执行碰撞解决。它决定了引擎的大部分“感觉”。
使用的求解器非常简单。物体在每个轴上分别移动,先在x轴上,然后在y轴上。
缺点
- 当速度很高时,“跳过角落”(因为运动是分开的),但这种行为需要非常高的速度才开始,并且可以通过非常简单的子步长来缓解
- 单个步骤不是很精确,但总体来说仍然足够精确,足以用于许多游戏,并且像上一个问题一样,可以通过子步长来缓解
优点
- 易于消除所谓的“幽灵碰撞”
- 有效地解决“子弹穿过纸”的问题(目前仅部分解决,容差比常规离散碰撞检测高两倍)
- 不需要使用任何真实单位
功能
- 身体和碰撞器分离(允许使用多个AABB构建身体)
- 实体碰撞器和传感器
- [用户体验改进]
Body
(《BodyDesc》)和Collider》(《ColliderDesc》)构建器
- 用户提供的元数据
- 遍历
Collider》的接触点
- 生成
Collision》/
Overlap》事件
- 为
Collider》提供碰撞掩码
- [优化] 广义阶段
- 查询
World》与任意AABB的交集
- 查询
World》与射线的交集(射线投射)
- [用户体验改进] 界面“简单”版本
- 瓦片地图集成(可能来自不同的crate)
灵感
这个库的API灵感来源于 nphysics,Box2D,并在一定程度上受到目前新兴的 rapier 的启发。
大多数交点和碰撞算法的实现高度基于 cute_c2。
拉取请求
欢迎所有拉取请求,但我希望对您的工作表示应有的尊重,因此如果它对现有功能引入了任何重大更改,请先提交一个问题。
依赖项
~5.5MB
~126K SLoC