【问题标题】:Texture2D.Bounds.Intersect, but the Bounds never move? - XNA, .Net 4.0Texture2D.Bounds.Intersect,但边界从不移动? - XNA,.Net 4.0
【发布时间】:2010-04-21 07:24:14
【问题描述】:

我仍然是 XNA 的新手,所以请原谅本文中的任何愚蠢问题和陈述(附加问题是我正在使用带有 .Net 4.0 的 Visual Studio 2010,这也意味着网络上存在的示例很少 -好吧,没有一个我能轻易找到):

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

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

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

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

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

工程师

【问题讨论】:

    标签: visual-studio-2010 .net-4.0 xna intersection texture2d


    【解决方案1】:

    Bounds 属性已添加到 Texture2D 类中,以简化 Viewports 的使用。 More here.

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

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

    【讨论】:

      【解决方案2】:

      我找到了基于另一个 post 的 XNA Creator Club 教程到 Ben S 的 stackoverflow。 Collision Series 1: 2D Rectangle Collision 教程说明了一切。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-23
        • 1970-01-01
        • 2012-03-23
        • 2013-08-30
        • 1970-01-01
        • 2013-02-18
        • 2013-04-01
        • 1970-01-01
        相关资源
        最近更新 更多