C# 在迭代列表中矩形的交点中查找
我在寻找矩形的交点时遇到了一个问题。我有一个在for循环中绘制到屏幕上的矩形列表。我想知道鼠标是否与它们中的任何一个相交,但我认为问题在于迭代发生得太快,以至于无法检测到碰撞。有没有更好的方法在矩形列表中查找交点 我尝试过的代码:C# 在迭代列表中矩形的交点中查找,c#,c#-4.0,xna,xna-4.0,C#,C# 4.0,Xna,Xna 4.0,我在寻找矩形的交点时遇到了一个问题。我有一个在for循环中绘制到屏幕上的矩形列表。我想知道鼠标是否与它们中的任何一个相交,但我认为问题在于迭代发生得太快,以至于无法检测到碰撞。有没有更好的方法在矩形列表中查找交点 我尝试过的代码: for (int i = 0; i < drawTangle.Count; i++) { mouse.Update(gameTime); if (mouse.clickRectangle.Intersects(drawTangle[x]) &am
for (int i = 0; i < drawTangle.Count; i++)
{
mouse.Update(gameTime);
if (mouse.clickRectangle.Intersects(drawTangle[x]) && mouse.LeftClicked())
{
info = listOfInfo[x];
isDrawingList = false;
moreInfo = true;
}
}
但这两种方法都无法检测到交叉点(至少对我们这些行动缓慢的人来说是这样)
有什么建议吗
变量:
Dictionary<string, Information> infoList;
List<string> listOfInfo;
List<Rectangle> drawTangle;
及
正如Paul0712提到的,我应该检查点击,然后检查交叉点 更新代码:
public void Update(MouseInput mouse)
{
if (mouse.LeftClicked())
{
for (int i = 0; i < drawTangle.Count; i++)
{
if (mouse.clickRectangle.Intersects(drawTangle[i]))
{
diseaseToInfo = listOfInfo[i];
isDrawingList = false;
moreInfo = true;
}
}
}
}
公共无效更新(鼠标输入鼠标)
{
if(鼠标左键单击())
{
for(int i=0;i
请尝试阅读您提供给我们的代码,因为您没有完整的代码,也不知道到目前为止您做了什么。“你能看出这有多不清楚吗?”约耶内森对此表示抱歉。让我更新代码。@YoryeNathan这更清楚吗?或者我应该添加更多?你说的“迭代发生得如此之快以至于无法检测到碰撞”是什么意思?一旦你点击鼠标,你会不会只是通过你的矩形,并检查每一个,如果鼠标在一个矩形,然后做任何你想做的。看起来你的左键点击例程实际上没有检查交叉点/碰撞?
public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(window, Vector2.Zero, Color.White);
if (isDrawingList)
{
for (int i = 0; i < drawTangle.Count; i++)
{
spriteBatch.Draw(button, drawTangle[i], Color.White);
spriteBatch.DrawString(font, infoList[listOfInfo[i]].name, new Vector2(drawTangle[i].X + 8, drawTangle[i].Y + 4), Color.Black);
}
}
else if (moreInfo)
{
spriteBatch.DrawString(font, infoList[info].name, new Vector2((GraphicsDeviceManager.DefaultBackBufferWidth / 2) - infoList[listOfInfo].name.Length / 2, 4), Color.Black);
}
}
public bool LeftClicked()
{
if (currentmouse.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Pressed
&& oldmouse.LeftButton == Microsoft.Xna.Framework.Input.ButtonState.Released)
{
clickedonce = true;
time = gametime.TotalGameTime.TotalSeconds + .5f;
return true;
}
else
{
return false;
}
}
clickRectangle = new Rectangle((int)Position.X, (int)Position.Y, 3, 3);
public void Update(MouseInput mouse)
{
if (mouse.LeftClicked())
{
for (int i = 0; i < drawTangle.Count; i++)
{
if (mouse.clickRectangle.Intersects(drawTangle[i]))
{
diseaseToInfo = listOfInfo[i];
isDrawingList = false;
moreInfo = true;
}
}
}
}