【问题标题】:Bezier paths from touch input, then have a sprite follow the path xna来自触摸输入的贝塞尔路径,然后让精灵跟随路径 xna
【发布时间】:2014-02-24 14:27:38
【问题描述】:

我正在使用 monogame 创建一个游戏,该游戏接受用户的触摸输入并沿着他们绘制的路径移动精灵。我希望能够从屏幕上的某个点(比如一个正方形)画一条线,然后在屏幕上的任何方向上画这条线,让它平滑(贝塞尔曲线),然后让一个字符跟随这条线。

有谁知道monogame是否支持xna 4.0中的曲线类?我真的不知道从哪里开始使用上面提到的来自用户触摸输入的技术来绘制和平滑线条,因为我的数学不是很好。

以前有没有人这样做过,并且不介意为我指出正确的方向?任何您认为可能有用的 sn-ps 或文章,请发布它们。我发现的所有文章都使用预先确定的路径,这些路径使用贝塞尔曲线进行平滑处理,而不是来自用户触摸输入。

干杯

【问题讨论】:

    标签: xna xna-4.0 bezier monogame


    【解决方案1】:

    贝塞尔曲线很难自动曲线拟合到一组点,因为您需要设置不在曲线上的控制点。

    我建议使用Catmull-Rom splines 或其他通过控制点的样条。你会很难找到现成的实现,但我可以帮助你开始。 Catmull-Rom 样条是分段定义的参数函数。您的点集 p 是您的触摸坐标。给定四个点 p0、p1、p2 和 p3,使用该页面上的方程式定义 p1 和 p2 之间的段。您可以通过创建许多 b 样条来指定使用更多段的样条,如下所示:

    样条 0 = p0, p0, p1, p2(重复 p0 以确保样条从 p0 而不是 p1 开始)
    样条 1 = p0, p1, p2, p3
    样条 2 = p1、p2、p3、p4
    样条 3 = p2、p3、p4、p5
    ...
    样条 (n-1) = p(n-2), p(n-1), p(n), p(n)

    要绘制样条线,您可以定期使用 sprite(在 t=0、t=0.1、t=0.2...处绘制 sprite)或使用线带或三角形带。

    【讨论】:

    • 谢谢回复,我用这个方法,如果我画了一定的数量,那么从这两点开始画一条线。如果我将我的游戏模型稍微更改为用户只能绘制曲线(左或右),这是否会使它看起来更平滑一些?只是我看到的这个例子看起来不太流畅。
    • 我不太明白你在问什么。
    【解决方案2】:

    我知道这个帖子很旧,但我正在尝试类似的任务。我偶然发现了这个链接,它可能会对你有所帮助:

    http://www.rengelbert.com/tutorial.php?id=182

    它需要用户的触摸输入来为精灵绘制一条平滑的曲线路径。

    也许这个资源可以帮助其他人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      相关资源
      最近更新 更多