我在一个相互碰撞的世界中有几个球。世界各地都有静止的墙壁。
有时候,他们最终会继续沿着相同的路径向上/向下或向左/向右移动(垂直于墙壁的运动?)
有没有简单的方法来检测这个,然后在任一方向上对它施加一点旋转?
任何具有box2d语言的伪代码或代码都将受到赞赏。
编辑:图片,根据@Andrew的要求
如果球继续像这样移动(左/右/左/右......),我想稍微推动它,使其从当前路径移动。
答案 0 :(得分:1)
我认为你可以创建你的b2ContactListener
子类来检测ball-wall
碰撞(这很简单并在Box2D manual
中解释)。在您为每个球存储3个速度值之后。
ball-wall
碰撞之前。ball-wall
碰撞后。ball-wall
碰撞后。当你获得这三个速度时(使用GetLinearVelocity
的{{1}}函数) - 检查它们是否有一定的精度位于同一条线上(除了符号之外有相同的方向)。如果满足此条件 - 应用一点旋转
答案 1 :(得分:0)
我以为你可以测量每次碰撞的角度?我现在没有时间发布正确的代码(今晚也许,如果你需要一个例子)但是你可以使用某种机制来检查球和墙之间任何碰撞的角度。
如果它正好是90度,则标记球(使用用户数据或在某些外部阵列中),并开始跟踪墙与该球之间连续90度碰撞的次数。如果两个90度的碰撞一个接一个地发生,你可以放心地假设球被卡住并轻轻推动。