在我的“Donkey Kong”游戏中试图实现引力时,我遇到了一个问题。当Mario在平台上时,跳跃运动非常精细。但是当他从一个平台掉到另一个平台时,与下一个平台的碰撞没有被检测到,所以马里奥穿过平台。 这就是我的引力逻辑的工作原理:每帧检查垂直速度,如果它不等于0则移动马里奥(+马里奥vVelocity)。只要没有与平台发生碰撞,vVelocity就会变为( - vVelocity gravity)。当与平台发生碰撞时,vVelocity会重置为0.问题是,每帧都会发生太大的变化,例如它可以从(100; 100)变为(100; 90)当vVelocity = -10时,如果(100; 95)中有平台,则不会检测到碰撞。我怎样才能解决这个问题?谢谢
答案 0 :(得分:0)
至少有两种选择。
引入小于平台大小的最大速度。通过这种方式,玩家无法在没有碰撞的情况下通过平台。
更新变量时,请使用两个或多个时间步。到目前为止,您的时间步长与帧相同。如果将框架分成几个步骤,则每个时间步长的速度将更小 - 因此玩家不会在没有碰撞的情况下穿过平台。
答案 1 :(得分:0)
您应该在最后和当前位置之间创建线,并检查线/平台交叉点是否有碰撞。 这也不是Racket特定的,而是一般的离散模拟问题。