自从我发布这个问题以来,我发现了很多新信息,所以我完全重写了它:
我在基于瓷砖的游戏中实现重力和跳跃时遇到了一些问题。有时,当我的角色在跳跃后落在瓷砖之间时,角色会从它们中间掉下来。
问题当然不在于我的速度太高,因为我的最大速度与我的图块大小相同。此外,每次角色跳跃后都不会出现问题。我经常可以跳跃,达到最大速度,并且仍然可以很好地着陆。但有时角色只是失败了。
我的关卡存在层层瓦片。每一层都有它自己的碰撞类型。因此,同一层中的每个图块都遵循相同的碰撞规则。在我当前的设置中,所有图层都使用逐像素碰撞。
这就是我更新播放器坐标的方式 http://pastebin.com/qVc6gv6T
这是我计算碰撞的课程。 http://pastebin.com/7GqrFih6
在更新中我只是这样做:
controls.Update(player);
physicsEngine.HandleCollissions(levelManager, player);
我想问题可能是因为玩家在碰撞后被移动到另一个瓷砖。与其他瓷砖碰撞。但这不算数,因为已经检查了另一个瓷砖是否有碰撞?或者可能是因为我使用 foreach 而不是 for 循环?