0

私はエンドレス ランニング ゲーム (例: canabalt、temple run、Jetpack Joyride) を作成しており、その「感触」を正しく理解しようとしています。これまでのところ、次の式を使用して速度を設定しています。

speed = (time+500)*(.05+(time/300))

試行錯誤以外に、増加を適切に感じるためのヒントはありますか?

4

2 に答える 2

2

ええと、私は自分のゲームの 1 つで似たようなことをしましたが、常に速度を上げるのではなく、1 分ごとに、またはプレイヤーが一定のポイントに到達したら速度を上げました。そのようです:

- (void)setTravelTimeTo:(NSNumber*)targetTime
{
    if (maxTravelTime > targetTime.floatValue)
    {
        maxTravelTime -= 0.1f;
        [self performSelector:@selector(setTravelTimeTo:) withObject:targetTime afterDelay:2];
    }
}

maxTravelTime時間またはあなたの場合の速度はどこにありますか。ニーズに合わせて変更するだけです。この場合の移動時間は、移動するプラットフォームが画面全体を移動するのに必要な時間です。

それが役に立てば幸い。

于 2012-12-04T19:34:55.290 に答える
2

一般に、移動するにつれて速度と位置が蓄積されます。だから何か

a = <some function of current speed (drag), player actions, and terrain>
v = v + a*deltaTime
x = x + v*deltaTime

DeltaTime は最後の計算 (おそらく最後のフレーム) からの時間です。これが意味することは、v は時間に対してせいぜい線形である必要があるということです (数式のように 2 次ではありません)。位置はせいぜい 2 次です。"a" の計算では、v が最大速度 (おそらくレベルに依存) に近づくと、"a" がゼロになるようにする必要があります。

于 2012-12-04T19:45:51.447 に答える