【问题标题】:Drawing Ball Flight using XNA使用 XNA 绘制球飞行
【发布时间】:2013-12-02 13:22:39
【问题描述】:

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

http://www.golf-simulators.com/images/ms4.jpg

我的代码以固定的时间间隔更新球的位置。我在想: 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);

    }

我不需要像使用粒子引擎这样的高级效果。只需一行就足够了。有什么建议吗?

【问题讨论】:

    标签: c# path xna trail


    【解决方案1】:

    C# List 类上有一个方便的 .ToArray() 函数,您可以在每次要绘制图元时调用该函数。希望对您有所帮助!

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

    【讨论】:

      【解决方案2】:

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

      如果您无法计算此值,您也可以尝试设置路径可以达到的最大长度,这样当它达到该长度时,它就会开始覆盖旧值。如果相机跟随球,这应该无关紧要。如果这些解决方案都不符合您的需求,请继续使用 ToArray 函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-17
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 2012-05-19
        • 1970-01-01
        • 2012-01-06
        • 1970-01-01
        相关资源
        最近更新 更多