Texture2D.Bounds.Intersect,但是Bounds从未移动过? - XNA,.Net 4.0

时间:2010-04-21 07:24:14

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

我仍然是XNA的新手,所以请原谅这篇文章中的任何愚蠢的问题和陈述(增加的问题是我使用的是带有.Net 4.0的Visual Studio 2010,这也意味着网上很少有例子 - 好吧,没有我能轻易找到的东西):

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

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

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

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

任何建议,指针都会非常感激。

Gineer

2 个答案:

答案 0 :(得分:1)

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

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

2D矩形碰撞教程是一个很好的开始,因为你已经发现:)

答案 1 :(得分:0)

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

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

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