基本上,当计算机和玩家发生碰撞时,此刻,我试图让玩家和计算机的速度与他们碰撞时的速度相反。之前有效,但现在不行,因为玩家和计算机玩家似乎都被卡住了,即使他们的速度都发生了变化。
我认为这是由于每帧检查更新方法等的次数,因此它的速度不断变化。
所以我只想在玩家和计算机发生碰撞时更改它,而不是在碰撞时不断更改它。
编辑:显示问题的视频链接(youtube.com/watch?v=oON4s2SRtso)
答案 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;
}
有几种方法可以解决这个问题。这只是一个。这个解决方案可能不会很好地扩展,但对于小的东西,它可以工作。