之前我问了一个关于检测是否选择了棋子的问题。我被介绍到数组,现在选择正在按照我的要求进行,除了我无法改变颜色这一事实。
public static Color[] pieceColo = new Color[4]
{ PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col};
这是我修复的数组,PawnBl1Col被声明为白色(以及所有其他值)
if (movement.pieceLocX[movement.pLvalX] <= movement.mouseCord.X
&& movement.pieceLocX[movement.pLvalX] + 100 >= movement.mouseCord.X
&& movement.pieceLocY[movement.pLvalY] <= movement.mouseCord.Y
&& movement.pieceLocY[movement.pLvalY] + 100 >= movement.mouseCord.Y)
movement.pieceColo[movement.pLvalX] = Color.Red;
执行时,if语句运行正常,但是当执行命令时,它会失败并且什么都不做。
movement.PawnBl1Col = Color.Red;
但是,如果我用上面的颜色数组替换它,它可以无缝地工作。
编辑:忘了很重要的一部分 movement.pLvalX只是一个与每个对象重合的整数。它测试所有8个值(将是32)。如果选择了X对象,那么X对象会改变颜色,我不确定这是否有意义。但即使用0-3测试颜色数组也无法工作。
答案 0 :(得分:1)
在您的绘图代码中,我假设您使用movement.PawnBl1Col
作为绘制颜色?
movement.pieceColo[movement.pLvalX] = Color.Red;
语句不会更改movement.PawnBl1Col
变量的值。它实际上是用Color.Red
替换数组中的条目。
颜色是一种值类型。使用像这样的数组的唯一方法是它是否包含引用类型。它有点乱,但你可以尝试这样的事情:
public class MyColor
{
public MyColor(Color color)
{
this.Color = color;
}
public Color Color { get; set; }
}
将此MyColor
类型用于变量(PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col
)并将数组更改为...
public static MyColor[] pieceColo = new MyColor[4] { PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col };
然后你应该能够做到这一点:
movement.pieceColo[movement.pLvalX].Color = Color.Red;
在绘图代码中使用movement.PawnBl1Col.Color
。