【发布时间】:2020-03-24 13:25:03
【问题描述】:
我想用 C++ 中的多边形制作我自己的碰撞系统。有静态碰撞器(从不移动,不能被推动)和动态碰撞器(可以移动,永远不能在静态碰撞器中。)。 我目前的做法是:
for (auto &dyn : dynamicColliders) {
for (auto &stat : staticColliders) {
// "how deep" is any vertex of dyn inside of stat? Store that in t.
// Is dyn inside stat (0 <= t <= 1)? -> push dyn outside by t
// not inside? -> next 2 lines
// "how deep" is any vertex of stat inside of dyn? Store that in r.
// Is stat inside dyn (0 <= r <= 1)? -> push dyn outside by r.
}
}
这是发生的事情的一个例子:
基本上,正方形是静态对象。六边形是动态的。 现在,当六边形碰撞底部正方形时,它会被推入顶部正方形。然而,顶部正方形将六边形推回底部正方形。 (现在,物理步骤结束了。不再考虑假底部碰撞。这个顺序发生的原因是顶部正方形是“最新”的碰撞对象)
我尝试了什么:
- 对所有“推送”向量求和并在末尾添加它们
- 如果在被推到方块外后发生碰撞,则完全取消当前物理步骤中的移动。
- (以上方法)
结果:
- 不起作用:六边形被推入下方的正方形,之前没有碰撞。
- 确实有效,但非常有问题。我无法沿着正方形滑行,因为它已被取消。
- (见上面的视频)
如何避免绕过这种类型的碰撞?非常感谢!
【问题讨论】:
标签: c++ 2d collision-detection game-physics