如何在计算机和播放器碰撞时引入延迟



基本上,当计算机和播放器碰撞时,目前,我试图使播放器和计算机的速度与它们碰撞时的速度相反。这在以前有效,但现在不起作用,因为即使玩家和计算机播放器的速度都发生了变化,似乎也会卡住。

我认为这是由于每帧检查更新方法等的次数,因此速度不断变化。

所以我只想在播放器和计算机发生碰撞时更改它,而不是在它们碰撞时继续更改它。

编辑:链接到显示问题的视频(youtube.com/watch?v=oON4s2SRtso)

当你检测到碰撞时,你不必只改变计算机和玩家的速度,你还需要改变它们的位置。
例如,减去速度矢量(与前一帧一样),以确保计算机和播放器不会发生冲突。这样,当您改变它们的速度时,它们就不会卡住,并且速度只会改变一次。

编辑

当移动的球员和球之间发生碰撞时,您必须暂时将其速度设置为 0,然后更改球的位置:

computerPlayer.Position.X = player.Position.X + offset

其中offset是从玩家原点到碰撞体边界的距离。
当你停止移动球员时,你会反转之前的球速(在你将其设置为 0 之前),使其反弹并从你身上消失。

从我从您的评论和问题中得到的信息来看,您可以跟踪物体何时碰撞。当它们发生碰撞时,只需设置一个布尔值,提醒您对象已发生碰撞。每次检查冲突时,只需重置布尔值即可。须藤代码示例

bool collision = false;
void CheckCollision(){
    colliding = /* Colliding() */;
    if(colliding  && !collision){
        collision = true;      
        //Manipulate directions, locations, etc.   
    }        
    else if(!colliding ){ //No collision
        collision = false;
    }
}
bool Colliding(){
    return colliding;
}

有几种方法可以做到这一点。这只是其中之一。此解决方案可能无法很好地扩展,但对于小的东西,它可以工作。

最新更新