我正在使用 Box2d 进行游戏,但我遇到了一个让我发疯的错误。我将情况简化为一个方形玩家在由一系列方形瓷砖组成的地板上无摩擦地来回滑动,由左右键(施加水平力)驱动。效果很好,在整个地板上来回滑动。
除了...每隔一段时间,玩家会突然粘在其中一个瓷砖的边缘,就好像它正在撞到(不存在的)墙壁一样。再往同一个方向推会失败,但只要我往相反的方向向后推一次,我就可以再次向前推过粘滞点。粘点似乎是随机的,除了在瓷砖的边缘。向左或向右时发生。
出于调试目的,我保留前两个更新刻度的位置/速度值,并在此停止发生时将它们打印出来。例如,在这里您看到玩家向右移动,略微减速;pos2 应该是 8.7 左右,但它反而停止了。
tick0: pos= 8.4636 vel= 7.1875
tick1: pos= 8.5816 vel= 7.0833
tick2: pos= 8.5816 vel= 0.0000
因此,当玩家为 0.8 且瓷砖宽度为 1.0 时,玩家在即将越过下一块瓷砖时停止(8.5816 + 0.8/2 = 8.9816)。事实上,我收到了一条冲突消息(我忽略了它,只是注意到它发生了)。它似乎只在向右移动时发生在 x.5816(或 -x.4184),向左移动时发生在 x.4167(或 -x.5833)
我说这就像撞墙,但实际上,当它撞墙时,数字看起来更像:
tick0: pos0= 12.4131 vel2= 8.4375
tick1: pos1= 12.5555 vel1= 8.5417
tick2: pos2= 12.5850 vel0= 0.0000
所以它在最后一个滴答声上向右移动,使其与墙壁接触。
有人见过这样的吗?关于我如何导致这种行为的任何建议?