基本上,当计算机和播放器碰撞时,目前,我试图使播放器和计算机的速度与它们碰撞时的速度相反。这在以前有效,但现在不起作用,因为即使玩家和计算机播放器的速度都发生了变化,似乎也会卡住。
我认为这是由于每帧检查更新方法等的次数,因此速度不断变化。
所以我只想在播放器和计算机发生碰撞时更改它,而不是在它们碰撞时继续更改它。
编辑:链接到显示问题的视频(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;
}
有几种方法可以做到这一点。这只是其中之一。此解决方案可能无法很好地扩展,但对于小的东西,它可以工作。