From 95b8dc765d491c95a6a0402d266cf48ced64997f Mon Sep 17 00:00:00 2001 From: yhh <359807859@qq.com> Date: Tue, 27 Jul 2021 14:03:57 +0800 Subject: [PATCH] add collision readme --- README.md | 3 +- docs/collision.md | 70 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 docs/collision.md diff --git a/README.md b/README.md index c5ac2eb3..8f91cbad 100644 --- a/README.md +++ b/README.md @@ -15,8 +15,9 @@ ecs-framework 的目标是成为功能强大的框架。它为您构建游戏提 - [创建系统](docs/system.md) - [全局时间Time](docs/time.md) - [协程Coroutine](docs/coroutine.md) -- [Physics/Collision](docs/physics.md) +- [Physics](docs/physics.md) - [Emitter](docs/emitter.md) +- [Collision](docs/collision.md) ## 交流群 点击链接加入群聊【ecs游戏框架交流】:https://jq.qq.com/?_wv=1027&k=29w1Nud6 diff --git a/docs/collision.md b/docs/collision.md new file mode 100644 index 00000000..01cf509e --- /dev/null +++ b/docs/collision.md @@ -0,0 +1,70 @@ +# Collision +碰撞检测在大多数游戏中都很常见。框架内使用了一些更先进的碰撞/重叠检查方法,如Minkowski、分离轴定理和古老的三角法 + +## 线与线相交 [lineToLine] +- 返回是否相交 +```typescript +const a1 = new es.Vector2(0, 0); +const a2 = new es.Vector2(100, 100); +const b1 = new es.Vector2(-100, 0); +const b2 = new es.Vector2(100, 200); +const result = es.Collisions.lineToLine(a1, a2, b1, b2); +``` +- 返回是否相交并获得相交的点 +```typescript +const a1 = new es.Vector2(0, 0); +const a2 = new es.Vector2(100, 100); +const b1 = new es.Vector2(-100, 0); +const b2 = new es.Vector2(100, 200); +// 相交的点坐标 +const intersection = new es.Vector2(); +const result = es.Collisions.lineToLineIntersection(a1, a2, b1, b2, intersection); +``` + +## 圆和圆相交 [circleToCircle] +```typescript +const center1 = new es.Vector2(0, 0); +const radius1 = 50; +const center2 = new es.Vector2(30, 30); +const radius2 = 50; +const result = es.Collisions.circleToCircle(center1, radius1, center2, radius2); +``` + +## 圆和线相交 [circleToLine] +```typescript +const center1 = new es.Vector2(0, 0); +const radius1 = 50; +const a1 = new es.Vector2(0, 0); +const a2 = new es.Vector2(100, 100); +const result = es.Collisions.circleToLine(center1, radius1, a1, a2); +``` + +## 点是否在圆内 [circleToPoint] +```typescript +const center1 = new es.Vector2(0, 0); +const radius1 = 50; +const point = new es.Vector2(0, 0); +const result = es.Collisions.circleToPoint(center1, radius1, point); +``` + +## 圆是否和矩形相交 [rectToCircle] +```typescript +const rect = new es.Rectangle(0, 0, 100, 100); +const center = new es.Vector2(30, 30); +const radius = 50; +const result = es.Collisions.rectToCircle(rect, center, radius); +``` + +## 矩形与线是否相交 [rectToLine] +```typescript +const rect = new es.Rectangle(0, 0, 100, 100); +const a1 = new es.Vector2(0, 0); +const a2 = new es.Vector2(100, 100); +const result = es.Collisions.rectToLine(rect, a1, a2); +``` + +## 点是否在矩形内 [rectToPoint] +```typescript +const point = new es.Vector2(100, 100); +const result = es.Collisions.rectToPoint(0, 0, 100, 100, point); +``` \ No newline at end of file