XNA在场景中确定单击对象

XNA在场景中确定单击对象,xna,click,collision,Xna,Click,Collision,我想写一个XNA游戏。但我是新来的。我想确定场景中最上面的对象。在矩形形式中,当两个矩形在屏幕上相交时,我想单击最上面的一个。但我不知道如何从场景中检测到最上面的对象。 有人能帮我吗?有方法吗?这取决于你用什么方法来绘制它们 如果使用的是SpriteSortMode.Deferred模式,则按照调用SpriteBatch.draw的顺序绘制它们。这样你就知道哪个物体是最上面的。要实现这一点,您需要检查列表、数组或其他任何对象中的每个对象,第一个(或最后一个,取决于您管理结构的方式)元素的矩形碰

我想写一个XNA游戏。但我是新来的。我想确定场景中最上面的对象。在矩形形式中,当两个矩形在屏幕上相交时,我想单击最上面的一个。但我不知道如何从场景中检测到最上面的对象。

有人能帮我吗?有方法吗?

这取决于你用什么方法来绘制它们

  • 如果使用的是
    SpriteSortMode.Deferred
    模式,则按照调用
    SpriteBatch.draw
    的顺序绘制它们。这样你就知道哪个物体是最上面的。要实现这一点,您需要检查列表、数组或其他任何对象中的每个对象,第一个(或最后一个,取决于您管理结构的方式)元素的
    矩形
    碰撞器(包含单击)将是最顶部的对象。一旦你找到了它,你需要打破“扫荡”列表/数组的循环,以便只检测到点击

  • 如果您使用的是
    SpriteSortMode.BackToFront
    FrontToBack
    ,则更难了解

参考资料

更新

当您使用延迟模式绘制对象时,它们会“碰撞”,您可以确定最后绘制的对象是最上面的对象。
如果使用列表,则必须执行以下操作:

for(int i=spriteList.Count-1;i>=0;i--)
{
if(spriteList[i].collisionRect.Contains(touch))
{
topMostSprite=精神病学家[i];
打破
}
}

谢谢您的回答。我寻找这个方法。但让我来解释一下。Begin()方法按绘图顺序绘制对象。spriteBatch.Begin(SpriteSortMode.Deferred、BlendState.AlphaBlend)的优点是什么。以及如何获取最后一个图形对象属性。它返回一个列表或其他东西。对不起,误会了。在这方面我是新手。如果您使用
SpriteBatch.Begin
而不使用任何参数,那么您使用的是默认模式
SpriteSortMode.Deferred
,这更容易理解,imho。其优点是,正如MSDN所说,“允许对
SpriteBatch
的两个或多个实例进行绘制调用,而不会引入冲突的图形设备设置。”对于绘制对象的列表,在绘制它们时必须在列表或数组中管理它们,我不知道您的代码是什么。SpriteBatch.Draw(b2,rect1,Color.White);spriteBatch.Draw(b1、rect2、彩色、白色);我是这样画我的东西的。假设我以rect2,rect1的顺序保存对象列表L。如果ı知道最后一个图形对象,则ı可以扫描我的列表并在其上单击“属性”。但是如何从SpriteBatch中获取最后一个对象呢?这是什么方法?谢谢你的回答。但可以肯定的是,我看到了精神主义者的元素,是吗?但我是随机添加的。但ı想按深度排序。ı怎么能做到这一点?