C# XNA游戏项目拖放&x2014;如何实现对象交换?
我正在制作一个库存系统,我被困在一个地方,在这个地方,物品应该通过简单的拖放从一个单元格移动到另一个单元格 有一个C# XNA游戏项目拖放&x2014;如何实现对象交换?,c#,swap,C#,Swap,我正在制作一个库存系统,我被困在一个地方,在这个地方,物品应该通过简单的拖放从一个单元格移动到另一个单元格 有一个Item[,]Inventory数组,它保存项目,object fromCell,toCell,当释放鼠标按钮时,它应该保存对要操作的单元格的引用,但是当我尝试这样做时: object temp = toCell; toCell = fromCell; fromCell = temp; …游戏只是交换对象引用,而不是实际对象。我该怎么做 UPD:多亏了巴托斯,我才明白这一点。事实证
Item[,]Inventory
数组,它保存项目,object fromCell,toCell
,当释放鼠标按钮时,它应该保存对要操作的单元格的引用,但是当我尝试这样做时:
object temp = toCell;
toCell = fromCell;
fromCell = temp;
…游戏只是交换对象引用,而不是实际对象。我该怎么做
UPD:多亏了巴托斯,我才明白这一点。事实证明,您可以安全地使用对象数组的引用,并使用保存的要交换的对象索引对其进行更改
代码可以是这样的:
object fromArray, toArray;
int fromX, fromY, toX, toY;
// this is where game things happen
void SwapMethod()
{
object temp = ((object[,])toArray)[toX, toY];
((object[,])toArray)[toX, toY] = ((object[,])fromArray)[fromX, fromY];
((object[,])fromArray)[fromX, fromY] = temp;
}
为什么不使用
清单
数组的索引:int fromCell,toCell
var temp = Inventory[toCell];
Inventory[toCell] = fromCell;
Inventory[fromCell] = temp;
您正在将资源清册建模为二维插槽数组,因此使用索引访问它似乎相当安全。为什么不使用
资源清册
数组的索引:int fromCell,toCell
var temp = Inventory[toCell];
Inventory[toCell] = fromCell;
Inventory[fromCell] = temp;
您正在将库存建模为二维插槽阵列,因此使用索引访问库存似乎相当安全。这如何
internal static void Swap<T>(ref T one, ref T two)
{
T temp = two;
two = one;
one = temp;
}
此外,还可以为阵列添加扩展(如果更方便的话)
这个怎么样
internal static void Swap<T>(ref T one, ref T two)
{
T temp = two;
two = one;
one = temp;
}
此外,还可以为阵列添加扩展(如果更方便的话)
问题是,你能传递对通过索引器方法获得的对象的引用吗?我的错,当然对数组是可能的,但对自定义索引器(
this[index]
)是不可能的。第一个方法根本不起作用,因为我没有在一个方法中从和到
单元格获取,而对于一次使用来说,秒似乎有点过头了。但无论如何还是要谢谢你。问题是,你能传递对一个通过索引器方法获得的对象的引用吗?我的错,当然对数组是可能的,但对自定义索引器(this[index]
)是不可能的。第一个根本不起作用,因为我没有在一个方法中从和到单元格,而对于一次使用来说,秒似乎有点过头了。不过还是谢谢你。
Inventory.Swap(fromCell, toCell);