/ /プラットフォームのゲームの固体オブジェクトを効率的に実装する方法は? - アルゴリズム、実装

プラットフォームゲームのソリッドオブジェクトを効率的に実装するにはどうすればよいですか? - アルゴリズム、実装

私はプラットフォームエンジンを書こうとしています今は数回です。私は、実体に関する実装の詳細には満足していません。 (壁、床、天井)私は議論したいいくつかのシナリオを持っています。

最初のような単純なプラットフォームゲームの場合マリオ、すべてがかなりブロックです。良い実装は、Marioが実行中で途中で崖がある場合など、必要な衝突のみをチェックする必要があります。衝突を効率的にチェックするにはどうすればよいでしょうか?私たちは常に、彼のヒットボックスがまだ地上にあるかどうかを見るためにマリオが取っているすべてのステップをチェックすべきでしょうか?あるいは、私たちが毎フレームこれを処理できないような他のプログラミング方法がありますか?

しかし、ブロックは退屈で、いくつかの斜面に置くことができます。 実装の詳細 - 賢明、スロープの処理方法Sonicのようないくつかのゲームは、このループ構造を持っており、そのキャラクターはループの中で "うわー"して進行することができます。

もう一つのシナリオは、「固体」のオブジェクト(床、天井、壁)の取り扱いです。 メガマンでは、プレーヤーが固い「壁」に入る道具を使って自分自身を天井に通すことができることがわかります。 おそらく、ここでのプログラミングは、プレイヤーが壁の外に出てプレイヤーが立ち往生しないようにするには、プレーヤーを素早く右に動かす。これは、プレーヤーが壁にこもってしまうのを避けるための、古い「回避策」方法です。最近の新しいゲームでは、ハンドルはより複雑です。たとえば、スーパースマッシュブローを利用すると、プレイヤーはキャラクターを(ヒットボックスと共に)拡大することができます。プログラムは、プレイヤーが天井の中を移動できるようにしますが、キャラクターが「ソリッド」エリアから外れた場合、さらに、時には、キャラクターが巨大であるため、3つの堅い床のシーンを通過しても、内部ではまだ動くことができます。誰もこれらの行に沿って実装の詳細を知っていますか?

だからここに、私は多くがあることを知っている実装が可能ですが、ここで私が気づくべきplatformerゲームのためのいくつかの高度な技術的な詳細はありますか?私は現在、3つのことを求めています:

  1. プラットフォームゲームの強固な衝突をいかに効率的に処理すべきか?キャラクターが走っていてプラットホームから完全に脱落したかどうかを調べるのに時間がかかりませんか?

  2. スローププログラミング。 最初は物理エンジンのことを考えていましたが、それは過酷かもしれないと思います。しかし、ここでは、斜面はキャラクターを別の標高に「プッシュ」または「プル」するかなり別の種類の床であることがわかります。それとも別の方法でプログラムする必要がありますか?

  3. 特別な場合のソリッドオブジェクト処理。 プレーヤーが法的なゲームルールやグリッチのいずれかを使って立体物に滑り込むことができる時間があるかもしれませんが、壁にいる場合はプレーヤーを何らかのランダムな方向に押すことは常に悪い考えです。

回答:

回答№1は1
  1. 少数のオブジェクトに対して、すべてのペアを実行する各タイムステップでの衝突検出チェックは問題ありません。何百ものオブジェクトを取得したら、より効率的な方法の検討を開始することができます。 1つの方法は、 バイナリ空間パーティショニング (BSP)を使用して近くのオブジェクトのみをチェックします。衝突検出は非常によく研究されているトピックであり、さまざまな最適化を説明する膨大なリソースがあります。
  2. 実際、物理エンジンはおそらく過度のこの仕事。一般的に言えば、動いている各キャラクタに、彼が立っている「地面」を関連付けることができます。彼が動くたびに、あなたは単に彼が地面の軸に沿って動くようにします。
  3. オブジェクトに滑り込ませることは、ほとんど常に悪い考えです。可能な場合は避けてください。