2013-10-26 49 views
0

我之前询问过有关检测棋子是否被选中的问题。我被介绍给数组,现在选择正在工作,我希望如何,除了我不能改变颜色的事实。尝试更改数组中的颜色

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测试颜色数组也不行。

回答

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

+0

谢谢,但它不工作,因为值计为空。我需要它默认为白色,然后改为红色。我觉得我应该能够弄清楚:/ – Ripsaw

+0

尝试将MyColor更改为结构体。或者只是确保你已经使用新的MyColor(Color.White)初始化了它的任何实例。 –