2D碰撞分辨率不一致



我目前正在用SFML制作一个平台游戏,我的冲突解决方案不一致。我正在使用AABB进行碰撞检测,我的碰撞解决方案代码如下(我现在只尝试与地板碰撞(

if (_player.collider.center.y < _entity.collider.center.y)
{
_player.vel.y = 0;
_player.onGround = true;
}

_实体是玩家碰撞的任何块,当地面为真时,玩家的重力将关闭。

当我的球员最初摔倒在拦网上时,他会被稍稍夹在拦网中,但当我跳起来时,他(大部分时间(都能正确落地。

这是解决碰撞的最佳方法吗?或者有更有效的方法吗?

检测到碰撞后,仅将速度和其他布尔值设置为必要值是不够的,还必须纠正碰撞。

可能发生的情况是,在你的代码检测到碰撞之前,你的玩家略高于一个实体,在下一帧之后,玩家的速度足够高,以至于它会切入实体,只有在那之后,你的游戏才会检测到碰撞。在其他情况下,速度可能完全一致,因为游戏阻止了剪辑,或者距离足够近,看起来玩家没有被剪辑到另一个实体中。

此外,我认为使用center.y不是一个好主意,因为它会由于截断而关闭。

最新更新