如何将Vector与Double相乘?

时间:2014-07-03 17:38:43

标签: c# xna

我正在尝试使用此等式在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”

4 个答案:

答案 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 doublep1 Vector实例相乘。

要乘以Vector实例,您需要使用Vector.Multiply