優れた2Dプラットフォーマー物理学[終了]


76

Box2Dで2Dプラットフォーマー用にセットアップされた基本的なキャラクターコントローラーがあり、気分を良くするために微調整を始めています。物理エンジンには微調整するための多くのノブがあり、物理エンジンで初めて書くのは私にはわかりません。ジャンプはいくつかのティックに力を加える必要がありますか?衝動?速度を直接設定しますか?アバターをすべての摩擦を取り除くことなく壁にくっつかないようにするにはどうすればよいですか(または、すべての摩擦を取り除きますが、空中でのみ)。カプセルとしてキャラクターをモデル化する必要がありますか?角の丸い箱?車輪が2つある箱?ただ一つの大きな車輪?誰かが前にこれをやったに違いないように感じます!

「赤ちゃんの最初の物理学」ではないウェブ上で利用可能なリソースは非常に少ないようです。これらはすべて、誰かがすでに問題を解決したいと思っている場所で途切れています。プラットフォーマー用の物理エンジンのほとんどの例には、浮遊感のあるコントロール、空中ジャンプ、または一時的な侵入が高すぎる場合の容易に悪用可能な動作などがあります。

私が意味するいくつかの例:

  • ジャンプの短いタップは短い距離をジャンプします。長いタップは高くジャンプします。
  • 高速で方向を停止または反転するときの短い横滑り。
  • 傾斜の上に安定して立っている(ただし、ダッキングするときに傾斜を下る)。
  • アナログコントローラーを使用する場合のアナログ速度。
  • 良いプラットフォーマーと悪いプラットフォーマーを区別する他のすべてのこと。
  • 安定した移動プラットフォームをお勧めしますか?

「ほら、これをやる」を本当に探しているのではありません。明らかに、正しいことはゲームで何をしたいかによって異なります。しかし、誰かが可能性を経験して、「テクニックAはXをうまく機能し、テクニックBはYをうまく機能させるが、それはCでは機能しない」、または「if(key = =スペース)character.impulse(0、1) "

回答:



25

実際の物理エンジンを使用して、「マリオのような」物理を実装することは非常に難しいです。

前回、Chipmunkを使用してこれを試してみましたが、プレーヤーを2つの円としてモデリングしました-「足の円」の上にある「体の円」

「足の輪」には摩擦があり、弾力がなく、かなり小さかった。「ボディサークル」は大きく、摩擦がなく、壁や急な斜面にくっつかないようにしました。

オブジェクトは回転を許可しないように制限されていました-単にスライドします

「足」が何かに触れている場合、または最後の数フレーム内にある場合(斜面の落下を許可するため)、プレーヤーは地面にいると見なされました(表面の通常チェックも行われている可能性があります)

コードを見てからしばらく経ちましたが、動作は次のようなものでした。

地上にいるとき:

  • 「追加重力」を適用します(斜面を下るのを助ける下向きの力)
  • 地面の摩擦を適用します(水平方向の減衰を大きくします)
  • コントロールに基づいて、左右の移動力を適用します。
  • (最大走行速度に近づくにつれて、左右の移動力を縮小します)
  • ジャンプが押された場合、上向きのインパルスを適用します

空中にいるとき:

  • 空気抵抗を適用(少量の水平減衰)
  • 通常の(または減少した)重力を適用する
  • 空中制御を許可している場合は、左右の移動力を適用します

2つの状態の切り替えには少し注意する必要があります-坂を下るときは、数フレームの間地面を離れることができることを忘れないでください-状態を切り替えたり、その時点でジャンプを禁止したりしないでください

ただし、「ジャンプアップ」プラットフォームの実装は難しい場合があります。楽しいこと(プラットフォームの移動、ワールドの回転など)を始めるときは、注意が必要です。プレーヤーが「アニメーション駆動」の移動オブジェクトに閉じ込められたり、押しつぶされたりしないようにしてください。


これはかなり古い答えですが、これについていくつか質問があります。1)「地形の傾斜に関係なく同じ速度を維持する」をどのように解決しますか?2)足に小さな円を使用し、身体に大きな円を使用している場合、プレイヤーは何度か端にぶら下がっていませんか?私はあなたのアプローチに本当に興味があります。
ノットバッド

18

正直なところ、物理エンジンを使用することは、非常に厳しい要件を持つそのようなサイズのドメインには適切なアプローチではないと思います。

全部自分で書いてください。「ボタンを長さy押したときに、この放物線形状で文字をx単位だけ上に移動する」と言う方が、調整するノブの束を持つよりもはるかに良い結果が得られます。


これは過去に数回やってきました。ある程度は機能しますが、ハックのあるコントローラーで物理を正しく実行するのは「難しい」ため、常に何か他のものを捨てることになります。この特定のゲームでは、プレイヤーの動きにスプリング/ロープのメカニズムを取り入れることを望んでおり、「ボックスをハックするのではなく、実際の物理エンジンをハックする」という領域にまで入り込みました。ムーバー」。

3
私はむしろボックスムーバーをハックしますが、少なくとも不安定になることはありませんが、物理エンジンは動きを厳密な仕様に制限する必要があるため、あまりにも多くの力をかけると爆発する傾向があります厳格な、彼らはそんなに遵守しようとすることができます)。また、1つの望ましくない問題を解決するために力を加えると、他のすべてに影響を与える傾向があり、微調整の地獄につながります。
カイ

10

最新のテクノロジーを使用してプラットフォームゲームをゼロから構築することに関する一連の記事を執筆しました。これには、単純な物理学の処理方法が含まれています。

http://www.wildbunny.co.uk/blog/2011/12/14/how-to-make-a-2d-platform-game-part-2-collision-detection/

ただし、より高度な技術が必要な場合は、完全な物理エンジンを使用してこれにアプローチすることは完全に可能です。これは、プレイヤーキャラクターを物理エンジンの完全に統合された部分にする(リトルビッグプラネットから)使用できるテクニックです。

インパルスを適用したり、速度を設定して物理エンジンへの「外部入力」としてプレイヤーを動かす代わりに、キャラクターを制御する制約を作成できます。

したがって、この制約は、プレイヤーの希望する速度と方向を入力として(ゲームから)持ち、プレイヤーの最大の強さと速度などをモデル化します。制約は、入力に従ってプレーヤーを動かそうとします(そして最大値に従います)。また、制約のため、プレーヤーが立っているオブジェクトに等しく反対の力を加え、それによってプレーヤーが動くプラットフォームの上に立つことができます。そして彼が移動するものに影響を与えるために。

このようなことをすることは、プレイヤーが物理ボックスの巨大な山の下にいる、または物理エンジンのコア部分であるため複数の動くプラットフォームを飛び越えるような状況に完全に自然に対処できることを意味します。

お役に立てば幸いです!

乾杯、ポール。


6

この質問には、Box2Dフォーラムで重要な議論があります。キャラクターの動き、ジャンプ、プラットフォーマーに関する議論を読んで、考えられるあらゆる問題に遭遇します。ただし、この問題は非常に複雑になったため、コリジョンフィルタリングシステムが更新され、テストベッドのサンプルが作成され、その方法が示されました。

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