无法修改XNA矢量组件我有一个名为Sprite的类,ballSprite是这个类的一个实例。Sprite有一个名为Position的Vector2属性。我正在尝试像这样增加Vector的X分量:ballSprite.Position.X++;但它会导致此错误:无法修改“WindowsGame1.Sprite.Position”的返回值,因为它不是变量是否可以像这样设置组件?X和Y字段的工具提示显示“获取或设置...”,所以我不明白为什么这不起作用。问题是ballSprite.Position返回一个结构,因此当您访问它时,由于值语义,它会创建它的副本。++尝试修改值,但它会修改临时副本-而不是存储在Sprite中的实际结构。您必须从读取位置获取值并将其放入局部变量,更改该局部变量,然后将局部变量分配回该位置,或使用其他一些类似的方法(可能将其隐藏为某些IncrementX方法).Vector2Dv;v=ballSprite.Position;v.X++;ballSprite.Position=v;另一个更通用的解决方案可能是在您的位置添加另一个Vector2。+运算符被重载,因此您可以创建一个具有所需更改的新向量,然后将其添加到向量中,而不是一次更新一个单独的组件。你可以做Position=newVector2(Position.X+1,Position.Y);或Position+=newVector2(1.0f,0.0f);或Position.X+=1.0f;一个简单的替代方法是:while而不是:sprite.Position.X=10;使用:sprite.Position=newVector2(10,sprite.Position.Y);而不是:sprite.Position.Y=10;使用:sprite.Position=newVector2(sprite.Position.X,10);而不是:sprite.Position.X+=10;使用:sprite.Position+=newVector2(0,10);而不是:sprite.Position.Y+=10;使用:精灵。位置+=新Vector2(10,0);除了使用newVector2(...)添加2个向量,您还可以使用Vector2.UnitX:ballSprite.Position.X+=1;//错误ballSprite.Position+=Vector2.UnitX;//解决方案这在您想要移动方向时很有用。例如,如果您只想横向移动:Vector2offset=newVector2(2,4);ballsprite.Position+=offset*Vector2.UnitX;在此示例中,speed.Y的值未添加到精灵的位置。为什么?offset==newVector2(2,4)UnitX==newVector2(1,0)--------------------------------上面的Vectors相乘,结果如下------------------------------offset*UnitX(X:2,Y:4)*(X:1,Y:0)(X:2*1,...Y:4*0)(X:2,Y:0)这具有可读性的额外好处.至少我是这么认为的。自己看看://增加球速的多种方式Xcoordinate.ballSprite.Position+=Vector2.UnitX;ballSprite.Position+=newVector2(1,0);ballSprite.Position=newVector2(ballSprite.Position.X+1,ballSprite.Position.Y);Vector2temp=ballSprite.Position;温度X++;ballSprite.Position=temp;当然还有一个垂直移动的Vector2.UnitY。将这些静态字段与Vector2.Zero和Vector2.One结合起来,您可以编写易于理解的代码。当我使用Vector2和direction时,我使用下表:以上是C#学习教程:我无法修改XNAVector组件共享的所有内容。如果对大家有用,需要详细了解C#学习教程,希望大家多多关注----10+1||-Vector2.One|-Vector2.UnitY|-1(X:-1,Y:-1)|(X:0,Y:-1)|||^---------------+----------------+---------------|||-Vector2.UnitX|Vector2.零|+Vector2.UnitX0Y坐标(X:-1,Y:0)|(X:0,Y:0)|(X:+1,Y:0)|||--------------+----------------+--------------五|||+Vector2.UnitY|+Vector2.One+1|(X:0,Y:+1)|(X:+1,Y:+1)||本文收集自网络,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处:
