【发布时间】:2012-07-01 15:01:23
【问题描述】:
编辑:也许这对获取 'b' 值有用?
for (int i = 0; i < inventory.Count; i++)
{
if (inventory[a].ItemRectangle.Intersects(inventory[i].ItemRectangle))
{
itemB = inventory[i];
}
}
编辑:这是我的进度。
Item itemA;
Item itemB;
int a = -1;
int b = -1;
if (a != -1 && b != -1)
{
itemA = inventory[a];
itemB = inventory[b];
Swap(ref itemA, ref itemB);
inventory[a] = itemA;
inventory[b] = itemB;
}
这就是我得到“a”值的地方。
if (item.ItemSelected == true)
{
a = item.ItemIndex;
}
else
a = -1;
我还没有弄清楚如何获得“b”值,因为我必须检查一个项目是否与同一个列表中的另一个项目发生冲突。如果有人知道我该怎么做,请告诉我。我猜它看起来像这样:
if (item.ItemRectangle.Intersects(//the other item.ItemRectangle)
{
b = item.ItemIndex;
}
else
b = -1;
我已经创建了一个列表
foreach (Item item in inventory)
{
if (mouseRectangle.Intersects(item.ItemRectangle))
{
if (Input.EdgeDetectLeftMouseDown())
{
switch (item.ItemSelected)
{
case false:
item.ItemSelected = true;
break;
case true:
item.ItemSelected = false;
break;
}
}
}
else if (Input.EdgeDetectLeftMouseDown())
{
switch (item.ItemSelected)
{
case true:
item.ItemSelected = false;
break;
}
}
else if (item.ItemSelected == true)
{
item.ItemPosition = new Vector2(mouseRectangle.X, mouseRectangle.Y);
item.ItemRectangle = new Rectangle(mouseRectangle.X, mouseRectangle.Y, 32, 32);
}
else if (item.ItemSelected == false && //a lot of checks to determine it is not intersecting with an equip slot
{
item.ItemPosition = item.OriginItemPosition;
item.ItemRectangle = item.OriginItemRectangle;
}
else if (item.ItemRectangle.Intersects(item.ItemRectangle))
{
//SwapItem(inventory, item, item);
}
这就是我需要帮助的代码部分。我希望列表中的任何项目都能够与列表中的任何其他项目交换。我的 SwapItem 方法只是一个占位符,我实际上还没有 SwapItem 方法。
我希望您传递给方法的参数与我要交换的项目相关。所以第一个项目是我用鼠标选择的项目,另一个项目应该是第一个项目与之相交的项目。
【问题讨论】:
-
去学习C#语言,然后回来,你会得到帮助。我很清楚你不了解编程的基础知识,for 循环应该是你学习的第一件事。我建议你先学习 C++,这样你就可以理解编程的基础知识,并用 C# 等高级语言高效地编程,但这取决于你。
-
首先,我知道我问这么多很烦人。但这就是我来这里学习的原因。而且我确实知道 for 循环是什么,我只是不明白为什么我需要它。我的 a 和 b 值除了 -1 之外的唯一值是当我选择了一个项目并单击另一个项目时。这样它将通过 if 检查并交换项目。老实说,我看不出我在这里做错了什么。我唯一遇到的问题是获取 b 值,因为我必须检查同一列表中两个项目之间的冲突。
-
再看我的回答,我编辑了,希望你能理解。
-
我现在应该有足够的信息来解决这个问题,无论是我自己的方法还是你的方法。非常感谢您的帮助。
-
您的方法运行良好,但与 foreach 不同,它滞后很多。所以我将不得不使用foreach。但它应该可以工作。