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

3

我对XNA还很陌生,如果此篇文章中有任何愚蠢的问题和陈述,请见谅(此外我使用的是带有.Net 4.0的Visual Studio 2010,这意味着网上几乎没有例子——至少没有我能轻易找到的):

在我正在构建用于学习更多关于XNA的“游戏”中,我有两个2D对象。我需要弄清楚这两个对象何时相交。

我注意到Texture2D对象有一个名为"Bounds"的属性,其中包含一个名为"Intersects"的方法,该方法以一个矩形(另一个Texture2D.Bounds)作为参数。

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

令我困惑的是Bounds属性出现在纹理上而不是在对象的位置(或Vector2)上。最终,我创建了一个小辅助方法,该方法接收对象及其位置,并计算它们是否相交,但我相信肯定有更好的方法。

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

Gineer

2个回答

1
为了简化与视口的工作,Bounds属性被添加到Texture2D类中。更多信息请点击此处
你不应该认为纹理本身就是对象,它只是保存在屏幕上绘制数据的东西,无论是用于Sprite还是RenderTarget。对象或精灵的位置以及位置/移动方式完全由您决定,因此您必须自己跟踪和处理这些内容。这包括任何边界的位置。
2D矩形碰撞教程是一个很好的起点,正如你已经发现的一样 :)

0

我在Stackoverflow上找到了基于这篇文章的XNA Creator Club教程,作者是Ben S碰撞系列1:2D矩形碰撞教程解释得非常清楚。

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接