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