When you specify properties with { get; set; } what happens is the compiler is creating a private field and keeps the property value in it.
Setting the Top property value to Y in the constructor will put that initial value of Y into that private field and that value will never get updated as Y changes.
Instead, implement your properties like this:
(This will work assuming that X and Y are being updated during the game)
public class Ball : IBall
{
public int Y { get; set; }
public int X { get; set; }
public int VX { get; set; }
public int VY { get; set; }
public static int Width;
public static int Speed;
public int Top
{
get
{
return Y;
}
}
public int Left
{
get
{
return X;
}
}
public int Right
{
get
{
return X + Ball.Width;
}
}
public int Bottom
{
get
{
return Y + Ball.Width;
}
}
}
因此,您拥有独立的属性和依赖属性。
独立属性是指未计算其值并且在系统中显示degrees of freedom的属性。
另一方面,依赖属性是从其他独立(和依赖)属性计算其值的属性。
我将假设X
,Y
和Width
以及独立属性。 Bottom
,Top
,Left
和Right
是相关属性。
以下是您定义Top
:
的示例
我会假设X
和Y
显示球的中心。
public int Top
{
get
{
return Y - (Height / 2);
}
set
{
Y = value + (Height / 2);
}
}
因此,当消费者要求Top
属性的值时,我们会从Y
和Height
计算出来。当消费者设置此属性的值时,我们会相应地更改Y
属性。
请注意,我假设点(0,0)位于屏幕的左上角。如果情况并非如此,则需要改变方程式。