C# 使用XNA绘制球飞行

C# 使用XNA绘制球飞行,c#,path,xna,trail,C#,Path,Xna,Trail,我目前正在用C#和XNA制作一个高尔夫球游戏。 到目前为止,我已经能够使球飞、反弹和滚动,同时显示位置和速度。 现在我希望能够看到球的轨迹(类似于下图),以便检查整个球的运动 我的代码以固定的时间间隔更新球的位置。我在想: 1) 利用这些立场,, 2) 将它们插入到VertexPositionColor[]的数组中, 3) 并使用GraphicsDevice.DrawUserPrimitives()方法绘制它们 但我到目前为止运气不好,VertexPositionColor是静态数组,而位置数

我目前正在用C#和XNA制作一个高尔夫球游戏。 到目前为止,我已经能够使球飞、反弹和滚动,同时显示位置和速度。 现在我希望能够看到球的轨迹(类似于下图),以便检查整个球的运动

我的代码以固定的时间间隔更新球的位置。我在想: 1) 利用这些立场,, 2) 将它们插入到VertexPositionColor[]的数组中, 3) 并使用GraphicsDevice.DrawUserPrimitives()方法绘制它们

但我到目前为止运气不好,VertexPositionColor是静态数组,而位置数据量总是在增加

我正在考虑使用List,但GraphicsDevice.DrawUserPrimitives()方法拒绝将其作为输入

    protected override void Draw(GameTime gameTime)
    {

    trail_vertice = new VertexPositionColor;
    trail_vertice.Position = Position;
    trail_vertice.Color = Color.Black;
    trail_amount += 1;
    trailList.Add(trail_vertice);

    basicEffect.CurrentTechnique.Passes[0].Apply();
    graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, trailList, 0, trail_amount);

    }
protected override void Draw(游戏时间游戏时间)
{
trail_vertice=新的顶点曝光颜色;
轨迹垂直位置=位置;
trail\u vertice.Color=颜色.黑色;
跟踪量+=1;
trailList.Add(trail\u-vertice);
BasicFect.CurrentTechnical.Passes[0]。Apply();
graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineStrip,trailList,0,trail_数量);
}
我不需要像使用粒子引擎这样的高级效果。只要一行就够了。有什么建议吗?

C#List类有一个方便的.ToArray()函数,您可以在每次绘制原语时调用该函数。希望有帮助

graphics.GraphicsDevice.DrawUserPrimitives<VertexPositionColor>(PrimitiveType.LineStrip, trailList.ToArray(), 0, trail_amount);
graphics.GraphicsDevice.DrawUserPrimitives(PrimitiveType.LineStrip,trailList.ToArray(),0,trail\u amount);

您可以计算显示轨迹所需的估计顶点数,创建一个该大小的数组,并在每个帧中填充更多值,而不是每帧将列表转换为一个数组(在我看来这是非常低效的)。(传递给DrawUserPrimitives的参数之一是要从数组中绘制的基元数)

如果无法计算此值,还可以尝试设置轨迹可以达到的最大长度,以便当轨迹达到该长度时,它开始覆盖旧值。如果摄像机跟踪球,这应该没什么大不了的。如果这些解决方案都不符合您的需要,请继续使用ToArray函数