我们可以使用哪些方法生成随机隧道,类似于this classic helicopter game中的方法?除此之外,它应该是平滑的,并允许你浏览它,虽然看起来尽可能自然(不太对称,但也没有过度扭曲),它还应该:
注意: 我不是要求哪个最好或游戏使用什么,这可能引发扩展讨论并且是主观的,我只是要求其他人知道或使用过的某些方法,或者甚至认为它们可能有效。就是这样,我可以从那里拿走它。
另外asked on gamedev。我认为它适用于这两个地方,因为它是一个算法问题,因为它是一个gamedev问题,IMO。
答案 0 :(得分:3)
我认为您可以将Bézier curves用于隧道墙,因为它们具有以下属性:曲线的每个末端都与该末端最后两个控制点之间的线段相切。这意味着可以懒散地生成曲线,随意附加曲线,而不会产生尖角。您只需缓冲一个屏幕外部分。一旦其最左边缘出现在屏幕上,就创建下一个离屏段。
如果使用立方贝塞尔曲线,则需要4个控制点。第一个必然与前一个段的最后一个控制点相同;为了保持交界处的平滑度,第二个将需要在包含前一个分段的最后2个控制点的线上的某个位置;第四个将是你希望这条曲线结束的地方;第三个可以自由选择。 (您可能希望在第1点和第4点之间保持水平,以避免曲线“加倍”的可能性。)
Béziers有2个其他属性可以简化您的实施:
编辑:用“凸包”替换“边界框”。
答案 1 :(得分:2)
确定隧道的宽度(它可能随距离减小),然后将2个控制点放在随机高度,但要确保前一对或多个点的垂直偏移足够小,以便直升机能够做一个机动。继续以相等的距离添加控制点:
_
_ _ _
_ _
_ _
接下来你需要找到中间点。我使用单调立方插值,它保证所有中间点始终在控制点之间,从不低或高。这是我用JavaScript制作的演示:http://explored.tk/experiments/monotone/
UPD:或者您可以生成一条这样的曲线,然后围绕它绘制对称的隧道边界。