繁体   English   中英

尝试更改数组中的颜色

[英]Trying to change a color in an array

我之前曾问过一个有关检测棋子是否被选中的问题。 我被介绍给数组,现在选择正在按我的要求工作,除了不能更改颜色的事实。

public static Color[] pieceColo = new Color[4]
  { PawnBl1Col, PawnBl2Col, PawnBl3Col, PawnBl4Col};

这是Im固定的数组,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;

但是,如果我将颜色阵列替换为上面的颜色阵列,它将无缝运行。

编辑:忘记了很大一部分运动。pLvalX只是一个与每个对象重合的整数。 它会测试所有8个值(将为32)。如果选择了X对象,则X对象会更改颜色,我不确定这是否有意义。 但是即使使用0-3测试颜色阵列也行不通。

在您的绘制代码中,我假设您使用的是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM