我正在尝试使用此等式在sprite中来回移动:
SpriteTexture sprite;
Vector2 position;
Vector2 p1 = new Vector2(0, 100),
p2 = new Vector2(0, 0);
double currentTime = 0, timestep = 0.01;
...
protected override void Update(GameTime gameTime)
{
position = currentTime * p1 + (1 - currentTime) * p2;
currentTime += timestep;
if (currentTime >= 1 || currentTime <= 0)
{
timestep *= -1;
}
}
我一直收到错误:“运算符'*'无法应用于'double'类型的操作数和Microsoft.Xna.Framework.Vector2”
答案 0 :(得分:1)
尝试使用:
Vector2.Multiply Method (Vector2, Single)
此处记录的API:
http://msdn.microsoft.com/en-us/library/bb198129.aspx
你不能使用*运算符将向量与double相乘,这就是错误抱怨的内容。
答案 1 :(得分:1)
Vector2支持浮点乘法,或者你可以手动将向量的各个分量乘以double(你将其转换为浮点数)。
例如:
position = currentTime * (float)p1 + ((float)(1 - currentTime)) * p2;
或者如果你想对矢量进行单独的乘法
// Assuming myVector is a Vector3:
myVector.X *= (float)someDoubleValue;
myVector.Y *= (float)someDoubleValue;
myVector.Z *= (float)someDoubleValue;
答案 2 :(得分:1)
尝试使用Vector2.Multiply
或将您的double转换为浮点数,并将Vector2
乘以currentTime
<强> 1 强>
position = Vector2.Multiply(p1, (float)currentTime) +
Vector2.Multiply(p2, (float)(1 - currentTime));
<强> 2 强>
position = (p1 * (float)currentTime) + (p2 * (float)(1 - currentTime));
答案 3 :(得分:0)
此行导致问题
position = currentTime * p1 + (1 - currentTime) * p2
在这里,您尝试将currentTime
double
与p1
Vector
实例相乘。
要乘以Vector实例,您需要使用Vector.Multiply