private Vector2 _position;
public Vector2 Position
{
get
{
return _position;
}
set
{
_position = value;
}
}
不使用代码中的自动属性功能。我想使用自动属性跳过大部分输入,但我后来在代码中遇到问题。我评论了受影响的下面几行。
public Vector2 Position { get; set; }
public void Update()
{
Position = Position + Velocity;
if (Position.X < 0 || Position.X > GraphicsViewport.Width - Texture.Width)
{
// If we get in here, we've hit a vertical wall
Velocity.X = -Velocity.X; // doesn't work
Position.X = Position.X + Velocity.X; // doesn't work
}
if (Position.Y < 0 || Position.Y > GraphicsViewport.Height - Texture.Height)
{
// If we get in here, we've hit a horizontal wall
Velocity.Y = -Velocity.Y; // doesn't work
Position.Y = Position.Y + Velocity.Y; // doesn't work
}
}
我在Visual Studio中遇到的错误声明“无法修改WindowsGame1.BouncingBall.Position的返回值,因为它不是变量。”那么如何让代码使用自动属性呢?
谢谢! 约翰
答案 0 :(得分:5)
您的确切问题已经asked and answered:
这段代码并没有试图做你的事 认为它正在努力......
Vector2是一个结构,所以你的调用 首先更新副本位置 堆栈,将velocity.X添加到新的 Vector2的'X'然后扔掉它。 原始值从未被修改过。
C#编译器捕获了你的错误 在这种情况下(p!)。你反而需要 要做:
位置=新 Vector2(Position.X + velocity.X, Position.Y);
价值与价值之间的差异 引用类型是C#的基础 - C#规范描述了这一点 “你好之后” 世界“
参见C#8.2节 规范了解更多信息:
http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-334.pdf
Alun Harford