如何在iPhone游戏中实现半随机化水平?

时间:2010-07-06 02:15:28

标签: ios

我想创建一个类似于iCopter或Canabalt的水平结构的游戏,其中每个级别都有一个随机的地板(和屋顶),但地板的高度永远不可能从前一个地板到达。我也不确定如何不断增加难度。我已经远远地搜索了一个教程或类似的东西,但我找不到任何东西。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:3)

说实话,听起来非常具体,需要成为教程的主题。我玩过Canabalt而不是iCopter所以我会谈论像前者这样的游戏。

你可以使用各种微积分方程计算加速度和重力,以精确计算平台必须要到达的位置,但我怀疑你会用更简单的近似来做同样的事情。如果您的所有平台都具有最小长度,那么您可以假设玩家在到达结束时能够达到的速度是合理的。然而,结合长时间你的跳跃算法让某人在空中,决定了相同高度的另一个平台可能仍然可以到达的最大距离。

您可以达到的最高平台通常由您的跳跃算法决定 - 可以是一个恒定的高度,或者它可以与速度成比例,但无论哪种方式,您都可以轻松估计最后可以做出的最合理的跳跃任何给定的平台。这为您提供了从那里可以达到的最大相对高度。

假设你的物理场是相当逼真的,并且当玩家在空中时你施加恒定的向下力,那么跳跃的顶点将在中途点左右。因此,相对于玩家而言,可达到的最大高度的平台需要是同一级别上的一个平台的一半。并且为了找到合理的相对高度和距离组合,可以线性插值。

下面的平台显然更宽松 - 它们可能比同一水平的平台更远,距离大致与你旅行的速度成正比。

然后,一个简单的算法是在每个阶段选择更高或更低的平台,从可达到的范围内选择相对高度,然后找到它所需的距离。

要调整难度,您可以从上面的这些相对高度和距离值开始,这些值表示可能的极值,并按比例减少它们以使跳跃更容易完成。我可能会开始减少50%,+ / - 10%(随机)以提供一些更强硬的跳跃。然后随着游戏的进行,我会慢慢将50%降低到0,这样玩家的错误余量就会越来越少。

编辑:自从我发布这个答案后,我发现了另一个可能有用的有趣来源:A Probabilistic Multi-Pass Level Generator。虽然有问题的游戏是不同的(我不认识的马里奥游戏之一),但在将平台放置在合理的高度和距离方面,许多原则都是相似的。提供了Java代码。

答案 1 :(得分:1)

我不确定你对数学,物理等有多舒服,但在我看来,这是一个非常简单的解决方案:

使用公式确定发射的球是否会在远处清除围栏是找到定义下一个平台可能的最远点的弧的合理方法。这是学习弹丸运动时在物理学中学到的标准公式。有一个相当互动的例子here包括等式。

我建议您确定下一个平台的位置,如下所示:

  1. 随机选择从当前平台末端到下一个平台开头的水平距离X(根据需要确定X的合理范围)。
  2. 使用围栏问题查找高度Y的最大值,以使平台可以访问。
    • 您可能需要从最大高度减去一小部分,以确保可以达到平台,具体取决于您实施的方式。
  3. 选择不高于最大值的高度Y(请记住,您可以并且应该允许Y的负值)。
  4. 将下一个平台放置在距离X和高度Y
  5. 的当前平台之上