プラットフォームゲームで動くプラットフォームをどのように処理しますか?


15

私はbox2dなどを使用したくありません。単純な移動プラットフォーム(上下、左右、斜め、円形のパス)が必要です。私の質問は、プレーヤーがバウンスしたり揺れたりすることなく、プラットフォームにしっかりと固定されるように、更新順序/制御階層を処理することですか?

回答:


16

私の解決策は、ゲームマップ内のすべての物理エンティティをツリーノードとして扱い、マップ自体をルートノードとして扱うことです。ノードには他のノードを含めることができます。すべてのノードは、マップノード内に(直接的または間接的に)含まれています。

たとえば、あなたのキャラクターがプラットフォームに立っているとしましょう。プラットフォームのノードには、キャラクターのノードが含まれています。そのため、プラットフォームが移動するたびに、プラットフォームに含まれるノード(この場合はキャラクター)も移動します。

これを実現するには、すべてのノードに親ノードに対する(x、y)位置が必要です。たとえば、キャラクターはプラットフォームに対して(1,0)に配置され、プラットフォーム自体はゲームマップに対して(10,10)に配置されます。そうすれば、プラットフォームが移動すると、キャラクターは暗黙的に移動します。

この階層ツリーでは、すべてのノードの位置は、自分の位置と各親ノードの位置の合計に等しくなります。マップ上のキャラクターの位置を取得したいとしましょう。計算します:

(文字の位置)+(親ノードの位置)+(ルートノードの位置)=(1,0)+(10,10)+(0,0)= (11,0)

さて、これであなたのキャラクターはプラットフォーム上に立っています。ジャンプはどうですか?さて、彼がジャンプした瞬間に、あなたは彼をプラットフォームから切り離し、プラットフォーム含むノードに彼を取り付けます。この場合、マップ(ルートノード)。

彼が再び着陸したら、彼が着陸したノードに彼を取り付けます。


1
また、ノードからのxおよびy速度を使用して、プレーヤーに影響を与えます。例1:プラットフォームは本当に速く動き、停止し、プレイヤーは上向きの勢いで起動します。例2:プレイヤーが致命的な速度で落下するよりもプラットフォームの下降速度がわずかに遅い。プラットフォームは、代わりの土地に安全でなければならないSPLUT
AttackingHobo

それは興味深いアプローチですが、プラッターの移動を許可するためだけに、私のエンジンに全面的な変更が加えられたようです。たぶん、一時的にこの効果を与える任意のオブジェクトにできるコンポーネントとしてobjectOnPlatformを作成したらどうでしょうか?
イアン

10

これを擬似物理問題として扱い、地面摩擦を使用して解決することをお勧めします。

すでに重力を使ってキャラクターを地面に固定しています。これにより、プラットフォームが上下に移動する状況に対応できます。左右の動きを処理するには、地面がキャラクターに大きな摩擦を及ぼす必要があります。通常、この摩擦レベルは1.0または100%です。

キャラクターが静止している場合、速度は0になり、摩擦のためにプラットフォームの速度の100%を継承します。次のようなもの:

character_velocity = friction * platform_velocity

このアプローチの利点は、急な坂道での摩擦を克服してキャラクターをスライドさせるなど、追加のプラットフォームメカニズムに簡単に役立つことです。また、摩擦を簡単に減らして、キャラクターが滑る氷を作成できます。

また、壁が低く垂れ下がっているなどの問題に対処することも簡単で、移動するプラットフォームからプレーヤーをノックすることができます。キャラクターを単純に親プラットフォームの子として扱う場合、多くの作業なしでは、衝突検出の他の部分と簡単にやり取りできない可能性が高くなります。


0

プレイヤーの位置を「レベルで絶対」ではなく「プラットフォームに対して」修正し、実際の位置を示す機能を使用できます。私はこれが好きではありません。

プラットフォームが+ x / + yを移動したときに、プレーヤーが同じくらい移動するように、プレーヤーをプラットフォームにバインドする方がおそらく(より簡単に)なるでしょう。

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