XNA中的碰撞检测

时间:2012-10-17 05:44:15

标签: c# visual-studio-2010 xna-4.0

我正在开发使用Xna游戏工作室的Windows游戏..

我的问题是我有两个像Ship和The Land Tile这样的物体......想象一下,船上有矩形调用shiprectangle,陆地有矩形叫landrectangle ..矩形表示物体的当前位置..

地块在地图上的随机位置被塞满了......我只是想知道船是否在地块上拼凑而且船只必须忽略土地并转向另一个地方..

简单的意思是我不想看到船在陆地上......这就是想法......

private void HandleLandCollition() { foreach (LandTile landtile in landtiles) { if (ship.rectangle.Intersects(landtile.rectangle)) { //Code Here } } }

2 个答案:

答案 0 :(得分:1)

基本版本可能是这样的:

通过Rectangle.Intersect - Method获得两个矩形相交的矩形。

A picture of two intersecting rectangles.

现在,您可以使用交叉矩形中的值将船移离陆地。

A picture of two intersecting rectangles. With arrows showing how to move one rectangle out of the other one.

在显示的情况下,你可以从船的X和Y值中减去宽度和高度 - 值,以使船离开地面。

答案 1 :(得分:1)

如果要创建逼真的碰撞响应,则应使用Farseer Physics库。它是Box2D端口,针对XNA进行了优化。

http://farseerphysics.codeplex.com/

如果没有,你可以使用@vinzBad解决方案。