「ダブルジャンプ」を正しく実装する


23

私はCoronaを使用して2D iPhoneゲームに取り組んでいます(試用版なので、フォーラムを使用できません)。このゲームでは、キャラクターが空を落ちていくので、私はキャラクターに「ダブルジャンプ」を実装しようとしています。私はコロナの物理ライブラリを使用してキャラクターを倒しましたが、これまでのところ、彼にジャンプさせる最良の方法は垂直インパルス法を使用することです

object:applyLinearImpulse(0, -0.4, object.x, object.y)

私が直面している問題は、キャラクターが始まったばかりのとき(垂直速度が遅い)、彼は本当に高くジャンプし、しばらく落ちているとき(垂直速度が高い)、ジャンプは無視できることです。速度に関係なくジャンプを同じにするために、入力として速度を使用したある種の方程式を使用することが最善の解決策であると推測していますが、その方程式がどうなるかはわかりません。

さて、それで私の考えはすべてです。最後の質問は、物理学で二重ジャンプをどのように正確に実装するのですか?私の問題に適切な方程式はありますか?別のアプローチを取るべきですか?スマッシュブラザーズなどのゲームで以前に行われたことがありますので、再現可能なソリューションがありますよね?

回答:


37

垂直速度をゼロに設定し、最初のジャンプに使用するコードと同じコードを呼び出すだけです。


4
ああ。それは...実際にはかなりうまくいきます。そしてとても単純なので、今は考えていないのは愚かだと感じています。しかたがない。ありがとう!
ジェシーJ

5
物事を必要以上に複雑にすることはしばしば魅力的です:)
アダムハート

2
エレガントな答え!
lathomas64

1

よくわかりませんが、UT2K4のようなゲームは次のようなロジックを使用するかもしれません。if
(jumped already &&!doubled jumped yet &&!touching ground && velocity.upは約0.0f)DoDoubleJump();

yまたはzコンポーネントはどこにありますか(どちらがアップしているかによって異なり
ます)これは、プレーヤーが最初のジャンプの最大の高さにあり、再び降り始めようとしているときにのみダブルジャンプができることを意味します。
この方法が好きなのは、少しのスキルを作成するからです(「velocity.upは約0.0f」の内部で発生するように時間を計る必要があります)。
必要に応じて、「約0.0f」を正の数にバイアスすることができます。これにより、たとえば、まだ上に移動している場合にのみダブルジャンプできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.