如何在电脑和玩家碰撞时引入延迟?

时间:2013-09-27 01:36:41

标签: c# xna collision-detection

基本上,当计算机和玩家发生碰撞时,此刻,我试图让玩家和计算机的速度与他们碰撞时的速度相反。之前有效,但现在不行,因为玩家和计算机玩家似乎都被卡住了,即使他们的速度都发生了变化。

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

所以我只想在玩家和计算机发生碰撞时更改它,而不是在碰撞时不断更改它。

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

2 个答案:

答案 0 :(得分:2)

当您发现碰撞时,您不必仅更改计算机和播放器的速度,但您也需要更改其位置。
例如,减去速度矢量(因为它是前一帧),以确保计算机和播放器不会发生碰撞。这样,当你改变它们的速度时,它们不会卡住,速度只会改变一次。

修改

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

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

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

答案 1 :(得分:0)

根据您的评论和问题,您可以跟踪对象何时发生碰撞。当它们发生碰撞时,只需设置一个布尔值,提醒您对象已经碰撞。每次检查碰撞时,只需重置布尔值即可。一个示例sudo代码

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;
}

有几种方法可以解决这个问题。这只是一个。这个解决方案可能不会很好地扩展,但对于小的东西,它可以工作。