在 Three.js 中移动一个盒子与另一个碰撞时的下一个相邻网格
Move a Box with another on colission respecting the next neighboring mesh in Three.js
发现了很多物理引擎,但没有一个能直接满足我的需要。
我试图找到一种简单的方法来推拉箱子,包括碰撞检测,它在移动时尊重下一个相邻的网格碰撞。
需要了解的一些用例:
除了盒子 1 之外的所有盒子都是可移动的。
向西推或拉箱子 4:
- 碰撞时应将方块 3 向西移动。
- 当盒子 3 撞到盒子 2 时,盒子 3 和 4 不能向西移动。
将 2、3 或 4 推向北:
- 碰到箱子2应该停止,因为箱子1是不可移动的。
应该不可能用一个盒子推拉2个碰撞的盒子。
也许不是最好的问题...我可以从头开始编写这样的逻辑,但这将以相当复杂的代码结束:)而且我想知道以前是否没有人解决过类似的问题。
是否存在使用现有物理引擎或 three.js 插件实现此类逻辑的简单方法?
希望问题表述得足够好,以便任何人都能理解。
如果您知道著名的抱石冲刺游戏,也许会更容易。
可以向两个方向移动两个岩石。
搬不动石头。
在我的情况下,应该可以移动 2 个碰撞 rocks/cubes 但不能移动 3 个。
我刚刚回答了。
为此,您应该使用 THREE.Box3
类型的边界框。
你一定要检查 this example out。我想这对你很有用。
所以基本上你想让某些物体在不同的点不可移动。您可以使用 physi.js 执行此操作。只需增加物体的质量,使其相对于其他物体变得如此重,以至于无法移动。
很简单,它更多的是关于几何和逻辑而不是物理......如果我理解你简化的世界。
在 boulderdash(或推箱子)的情况下,移动是基于平铺的,当您要移动角色时,您首先检查 adjacent 平铺,在运动的方向。它可以步行或被可移动物体(或墙壁)占据。如果有可移动的物体,则检查 下一个相邻的 方块。如果它是可步行的,那么就意味着它确实是可移动的。否则,该可移动对象当前不可移动。
在像你这样的非平铺场景中,你检查是否与第一个盒子发生碰撞,当发生这种情况时,你检查是否存在下一个碰撞盒子,添加一个与第一个盒子大小相同的新碰撞点, 运动的方向。
发现了很多物理引擎,但没有一个能直接满足我的需要。 我试图找到一种简单的方法来推拉箱子,包括碰撞检测,它在移动时尊重下一个相邻的网格碰撞。
需要了解的一些用例:
除了盒子 1 之外的所有盒子都是可移动的。
向西推或拉箱子 4:
- 碰撞时应将方块 3 向西移动。
- 当盒子 3 撞到盒子 2 时,盒子 3 和 4 不能向西移动。
将 2、3 或 4 推向北:
- 碰到箱子2应该停止,因为箱子1是不可移动的。
应该不可能用一个盒子推拉2个碰撞的盒子。
也许不是最好的问题...我可以从头开始编写这样的逻辑,但这将以相当复杂的代码结束:)而且我想知道以前是否没有人解决过类似的问题。 是否存在使用现有物理引擎或 three.js 插件实现此类逻辑的简单方法?
希望问题表述得足够好,以便任何人都能理解。 如果您知道著名的抱石冲刺游戏,也许会更容易。
在我的情况下,应该可以移动 2 个碰撞 rocks/cubes 但不能移动 3 个。
我刚刚回答了
为此,您应该使用 THREE.Box3
类型的边界框。
你一定要检查 this example out。我想这对你很有用。
所以基本上你想让某些物体在不同的点不可移动。您可以使用 physi.js 执行此操作。只需增加物体的质量,使其相对于其他物体变得如此重,以至于无法移动。
很简单,它更多的是关于几何和逻辑而不是物理......如果我理解你简化的世界。
在 boulderdash(或推箱子)的情况下,移动是基于平铺的,当您要移动角色时,您首先检查 adjacent 平铺,在运动的方向。它可以步行或被可移动物体(或墙壁)占据。如果有可移动的物体,则检查 下一个相邻的 方块。如果它是可步行的,那么就意味着它确实是可移动的。否则,该可移动对象当前不可移动。
在像你这样的非平铺场景中,你检查是否与第一个盒子发生碰撞,当发生这种情况时,你检查是否存在下一个碰撞盒子,添加一个与第一个盒子大小相同的新碰撞点, 运动的方向。