C#:如何判断哪一方发生了碰撞?

时间:2009-09-30 20:01:52

标签: c# visual-studio-2008 collision-detection

我认为标题是相当自我解释的,但只是为了澄清我试图弄清楚如何判断碰撞发生在哪一侧。

对于更多细节,我正在尝试制作一个类似迷宫的游戏,所以我不能简单地停止碰撞时的所有动作。相反,我需要能够分辨出碰撞发生在哪一侧,这样我才能阻止这个方向。

感谢任何帮助,如果有更好的解决方法,我会全力以赴。

我希望这是足够的细节,但如果你需要,请问我会编辑。提前谢谢。

[编辑] @viggity - 不,我没有使用任何特定的游戏引擎,我会发布当前的“检测”代码,但它有点,荒谬,健壮。

@Streklin - 我正在使用this.Paint事件来绘制表单本身,因为它建议我开始这样做以更好地实时绘制。我也使用一个位置,每当计时器根据我按下的内容(左,右,上,下)滴答时更新。是的,迷宫是基于瓷砖的。目前它甚至只包含3种颜色。我不是一个非常高级的程序员。

@Eric--绝对是一场比赛。同样,我只有3种颜色,线条为黑色,背景为白色,方形(用户)为绿色。我正在使用带有位图的DrawImage()绘制到屏幕上。

[编辑伪代码摘要]

foreach(墙上的墙_wall) 如果(player.intersectsWith(_wall))   停止运动;

@JeffH - 我真的不确定你在问什么,因为除了测试代码之外我还试着让它运行起来。我唯一遗漏的是if语句来检查它是否是x轴,以便x和y可以相互独立地移动。所以,不要因为碰到墙壁而“卡住”,而是可以滑动它。虽然问题发生在此之前,但我没有看到包含这一点的重点。

2 个答案:

答案 0 :(得分:4)

假设你在这里谈论3D游戏。

您可以看到的脸的法线指向您,因此您的方向矢量与脸部法线的点积将为负。如果它是积极的那么你就是从后面来的。

如果它为零,那么你就会直视脸部。

|              <---------- your direction of travel
|
|----------> <- face normal
|
| <- face

如果你不是3D,那么你可以存储墙面朝向的方向(作为2D矢量),并用你的2D运动方向做同样的点积。

答案 1 :(得分:0)

根据您的编辑,您一次只能朝一个方向前进?或者你可以走对角线方向吗?如果是晚些时候,ChrisF已经为您提供了3D答案以及2D的相应信息。如果没有,你应该只是在旅行的方向上停止旅行 - 因为只有四种可能性,它应该很容易检查所有的简单的首发游戏。