XNA在场景中确定单击对象
我想写一个XNA游戏。但我是新来的。我想确定场景中最上面的对象。在矩形形式中,当两个矩形在屏幕上相交时,我想单击最上面的一个。但我不知道如何从场景中检测到最上面的对象。XNA在场景中确定单击对象,xna,click,collision,Xna,Click,Collision,我想写一个XNA游戏。但我是新来的。我想确定场景中最上面的对象。在矩形形式中,当两个矩形在屏幕上相交时,我想单击最上面的一个。但我不知道如何从场景中检测到最上面的对象。 有人能帮我吗?有方法吗?这取决于你用什么方法来绘制它们 如果使用的是SpriteSortMode.Deferred模式,则按照调用SpriteBatch.draw的顺序绘制它们。这样你就知道哪个物体是最上面的。要实现这一点,您需要检查列表、数组或其他任何对象中的每个对象,第一个(或最后一个,取决于您管理结构的方式)元素的矩形碰
有人能帮我吗?有方法吗?这取决于你用什么方法来绘制它们
- 如果使用的是
模式,则按照调用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中获取最后一个对象呢?这是什么方法?谢谢你的回答。但可以肯定的是,我看到了精神主义者的元素,是吗?但我是随机添加的。但ı想按深度排序。ı怎么能做到这一点?