生成随机隧道

IVl*_*lad 6 random algorithm

我们可以使用哪些方法生成随机隧道,类似于这个经典直升机游戏中的那个?除此之外,它应该是光滑的,并允许您通过它导航,同时寻找尽可能(不太对称,但并不过分扭曲要么)自然,它也应该:

  1. 最重要的是 - 无限的让我能够及时控制它的厚度 - 当我认为合适的时候,让它变得更窄或更宽.
  2. 理想情况下,应该可以用平滑的曲线高效地生成它,而不是像上面游戏那样的矩形;
  3. 我应该能够事先知道它的界限是什么,所以我可以检测到碰撞并在隧道内产生通电;
  4. 任何其他属性,让您可以更好地控制它或提供优化的可能性是值得欢迎的.

注意: 我不是要求哪个最好或游戏使用什么,这可能引发扩展讨论并且是主观的,我只是要求其他人知道或使用过的某些方法,或者甚至认为它们可能有效.就是这样,我可以从那里拿走它.

还在gamedev上询问.我认为它适用于这两个地方,因为它是一个算法问题,因为它是一个gamedev问题,IMO.

j_r*_*ker 3

我认为您可以使用B\xc3\xa9zier 曲线作为隧道壁,因为它们具有曲线的每一端都与该端最后两个控制点之间的线段相切的属性。这意味着可以惰性地生成曲线,并在运行时附加它们,而无需创建尖角。您只需要缓冲一个屏幕外片段。当其最左边缘出现在屏幕上时,创建下一个屏幕外片段。

\n\n

如果使用三次方 B\xc3\xa9ziers,则需要 4 个控制点。第一个控制点必须与前一段的最后一个控制点相同;为了保持连接处的平滑度,第二个控制点需要位于包含前一段的最后 2 个控制点的线上的某个位置;第四个将是您希望该曲线结束的位置;第三个可能可以自由选择。(您可能希望将其保持在第 1 点和第 4 点之间的水平位置,以避免曲线“折返”的可能性。)

\n\n

B\xc3\xa9ziers 还有 2 个其他属性可以简化您的实现:

\n\n
    \n
  • 该曲线完全包含在由控制点定义的凸包内,因此很容易确保顶部曲线和底部曲线之间存在间隙。
  • \n
  • 您可以在任意点拆分 B\xc3\xa9zier 以生成 2 个子 B\xc3\xa9zier。这对于光栅化/线性化很方便。
  • \n
\n\n

编辑:用“凸包”替换“边界框”。

\n