2

我对 XNA 还是很陌生,所以请原谅这篇文章中的任何愚蠢的问题和陈述(附加的问题是我正在使用带有 .Net 4.0 的 Visual Studio 2010,这也意味着网络上的示例很少 - 嗯,没有我很容易找到):

我在一个“游戏”中有两个 2D 对象,我用它们来了解有关 XNA 的更多信息。我需要弄清楚这两个对象何时相交。

我注意到 Texture2D 对象有一个名为“Bounds”的属性,该属性又具有一个名为“Intersects”的方法,该方法将 Rectangle(另一个 Texture2D.Bounds)作为参数。

但是,当您运行代码时,即使对象位于屏幕的不同侧,它们也总是相交。当我进入代码时,我注意到对于 Texture2D 边界,当您将鼠标悬停在边界和 X 上时,我会返回 4 个参数,并且 Y 坐标对于两个对象总是读取“X = 0,Y = 0”(因此它们总是相交)。

让我感到困惑的是,Bounds 属性位于纹理上,而不是位于对象的位置(或 Vector2)上。我最终创建了一个小辅助方法,它接收对象和位置,然后计算它们是否相交,但我确信一定有更好的方法。

任何建议,指针将不胜感激。

吉尼尔

4

2 回答 2

1

Bounds属性已添加到Texture2D类中以简化使用Viewports. 更多在这里

您不应该将纹理视为对象本身,它只是保存被绘制到屏幕上的数据的东西,无论它是用于 aSprite还是RenderTarget. 对象或精灵的位置以及如何处理位置/移动完全取决于您,因此您必须自己跟踪和处理。这包括任何边界的位置。

正如您已经发现的那样,2D 矩形碰撞教程是一个好的开始:)

于 2010-04-21T17:21:16.093 回答
0

我发现 XNA Creator Club 教程基于Ben S的另一篇stackoverflow帖子碰撞系列 1:2D 矩形碰撞教程解释了这一切。

每次尝试运行相交方法时,您似乎都必须根据游戏中移动的原始矩形创建新的矩形,然后它将包含更新的 X 和 Y 坐标。

我仍然不太清楚为什么原始对象矩形位置不能保持最新,但如果这是它应该工作的方式,那对我来说已经足够了......现在。;-)

于 2010-04-21T07:58:35.350 回答