我有一个名为Sprite的类,而ballSprite是该类的一个实例。 Sprite具有一个称为Position的Vector2属性。

我试图像这样增加Vector的X分量:

ballSprite.Position.X++;

但这会导致此错误:
Cannot modify the return value of 'WindowsGame1.Sprite.Position' because it is not a variable

无法设置这样的组件吗? X和Y字段的工具提示显示“获取或设置...”,因此我看不到为什么它不起作用。

最佳答案

问题在于ballSprite.Position返回一个结构,因此当您访问它时,由于值语义的缘故,它会创建它的一个副本。++试图修改该值,但它将修改一个临时副本-而不是存储在Sprite中的实际结构。

您必须从读取Position中获取值并将其放入局部变量中,更改该局部变量,然后将局部变量分配回Position中,或者使用其他类似的方式(例如将其隐藏为IncrementX)方法)。

Vector2D v;
v = ballSprite.Position;
v.X++;
ballSprite.Position = v;

另一个更通用的解决方案可能是向您的位置添加另一个Vector2。 +运算符已重载,因此您可以使用所需的更改创建一个新向量,然后将其添加到向量中,而不是一次更新单个组件。

关于c# - 无法修改XNA矢量组件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2534574/

10-14 22:49