我在编码方面遇到了障碍。我用C#编写代码,用Monogame编写程序。
我有一个单位列表,我正在尝试用它们进行鼠标选择。我将一条光线从鼠标射入屏幕,然后找出它撞击的第一个物体。
// A method to find which units are currently under the mouse.
static public void FindPickedUnits(string ID)
{
foreach (Unit unit in ListDictionary[ID])
{
// Run the code to check whether or not it is picked, and returns a float representing how close it is.
unit.IsPicked = Cursor.Pick(unit.Collisions);
// And if it is picked...
if (unit.IsPicked != null)
{
// We will clone it as the closest unit if none exist, or...
if (ClosestUnit == null)
{
ClosestUnit = unit;
}
// if one already does, overwrite it if it's even closer.
else if (unit.IsPicked < ClosestUnit.IsPicked)
{
ClosestUnit = unit;
Console.WriteLine("The new closest unit is at X" + unit.Position.X + " Y" + unit.Position.Y);
}
}
}
}
// elsewhere...
Console.WriteLine("The selected unit's color is " + ClosestUnit.Tint);
此代码将拾取的单元克隆到ClosestUnit对象中,然后我可以随时读取,没问题。
无论其
我不想纯粹读取最近单位的值,我想写给他们,并改变其中的一些。但是,如果我更改ClosestUnit对象的值,它不会反映回单位列表中的实际单位。
TL; DR我希望能够从单元列表中单个单元,然后在代码中的其他位置写入单元。如果ClosestUnit对象的功能类似于ref参数,则直接引用列表中的实际单位而不是克隆,这很容易,但我不知道如何做到这一点。
处理此问题或避免此问题的最有效方法是什么?
答案 0 :(得分:0)
具有讽刺意味的是,我的代码一直没有任何问题。我没有意识到ClosestUnit对象本质上是一个类(引用类型),它直接引用了ListDictionary中的单元,而不是它的克隆。
我可以更改ClosestUnit对象上的值,它会反映回原始值。耶!