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

4

2 回答 2

1

一个基本版本可能是这样的:

通过 Rectangle.Intersect - 方法,您可以获得两个矩形相交的矩形。

两个相交矩形的图片。

现在您可以使用交叉矩形中的值将船从地块上移开。

两个相交矩形的图片。 用箭头显示如何将一个矩形移出另一个矩形。

在所示情况下,您只需从 Ship 的 X 和 Y 值中减去 Width 和 Height - 值,即可将船从地块上移开。

于 2012-10-17T08:32:42.003 回答
1

如果您想创建逼真的碰撞响应,您应该使用 Farseer 物理库。它是 Box2D 端口,针对 XNA 进行了优化。

http://farseerphysics.codeplex.com/

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

于 2012-10-17T08:44:26.097 回答