リアルな2Dロールプレイングゲームの衝突検出を作成するにはどうすればよいですか?


9

私はいつもスターオーシャン、ファイナルファンタジー、ソードオブマナ、さらには「テイルズオブ」シリーズのような昔ながらの2Dロールプレイングゲームを作りたかったのですが、多くの人が作っていると思います。しかし、1行のコードを書く前でも、多くの調査、描画、トライアウトを行いました。

私の質問に対するほとんどすべての回答は見つかりましたが、解決できなかった問題があります。前に挙げたゲームのように、現実的でありながら単純な衝突検出をどのように作成しますか?

私はすでに衝突検出を計算するいくつかの方法を知っています、以下の例を見てください:

衝突検出の例

これらのどれも私のニーズを満たしていません。

  • タイルベースの衝突は単純すぎるため、スターオーシャンよりもゼルダに適しています。さらに、各タイルの描画は、リアルに見えるようにすべてのスペースを埋める必要があります。
  • Pixel-perfectには制約が多すぎます。タイルのあちこちにピクセルがある場合、プレーヤーはどこにもない中央部でスタックする可能性があります(つまり、一部のゲームでは、幅2ピクセルのツリールートでスタックします)。
  • また、バイナリマスクはメモリと設定を多用します。

たくさんのドキュメントを読みましたが、見栄えの良いものは見つかりませんでした。また、すべてのトライアウトが、以前使用していたものに近づきませんでした。進化した2D RPGがどのように機能するかについての良いリンクやチュートリアルがある場合は、私に知らせてください。


2
その衝突マスクのためにどのような環境を開発していますか?これは、ほとんどの最新のシステムでは本当に問題ではなく、衝突マスクは実際に探しているもののように聞こえます。
グレゴリーAvery-Weir

ほとんどの場合XNAを使用してPCで開発していますが、最近WP7でプロジェクトを始めることを考えています。コリジョンマスクで私が抱えていた問題は、小さな解像度を使用すると、たとえばキャラクターをコーナーで動かなくなってしまうなど、ピクセルパーフェクトと同じように機能することでした。したがって、スムーズな動きのためにベジェ曲線を使用しない限り、マスクの作成方法には非常に注意する必要があります。
Aymericに

回答:


9

ここではNチュートリアルが役立ちます。確かに、これらはアーケードスタイルのプラットフォーマー向けですが、トップダウンビューRPGでも同様に機能します。重力をかけないでください。前提は、円、軸に沿った境界ボックス、線、点などの基本的な形状のコレクションで衝突をテストすることです。

次に、これらを(おそらくカスタムレベルエディターを介して)装飾するか、自動的に生成する(最も近いボックスまたは円に合わせる)-またはその両方(デフォルトで自動生成ボックス/円にして、デザイナーが調整できるようにする) 。

私が働いている場所では、かなりの数のプラットフォーマーといくつかのトップダウンの探索ゲームを行ってきました。GBAの日以来、私たちはそれらを行ってきました。私たちはほとんどの場合、AABを文字とオブジェクトに使用し、スプライトエディターで調整可能です。ここでは、スプライトごとに大量のボックスを使用できるようにしています。私たちは持っているかもしれません:

  • 物にぶつかるオブジェクトの形状を表す1つ以上の衝突ボックス。
  • おそらく攻撃の最中にあるときにのみ発生する多くの「攻撃ボックス」(そしてスプライトでアニメーション化)、おそらく武器ごとに2つまたは3つです。
  • 他の攻撃ボックスにぶつかるとダメージを受けるいくつかの「脆弱なボックス」-デフォルトでは、衝突ボックスを使用しますが、脆弱なボックスは、衝突ボックスよりも小さいと気分がよくなるため、この方法で位置を認識する損傷
  • AIのセンスリージョンを説明するAIの1つ以上の「アクティベーションボックス」-たとえば、プレイヤーがこのリージョンにいる場合、それらは攻撃します。

レベルは主に線セグメントの文字列です。損傷したり滑りやすい表面などを説明するために、セグメントごとに少しのメタデータがあります。

したがって、衝突の検出と応答のほとんどは、AABB-vs-AABBまたはAABB-vs-segmentになります。時々、AABBBがここでも同様に行いますが、発射体の円と何かのどちらかを投げます。

見栄えを良くし、適切に動作させるために多くの基本的な形状は必要ありません-それらを微調整して反復できるのであれば、いくつかはうまくいくでしょう。


また、システムをブレンドすることについて気を悪くしないでください。タイルベースの衝突は、一部の領域(世界の大部分を占める)では優れているかもしれませんが、オブジェクト間相互作用にとっては恐ろしいものです。それはいいです; オブジェクトとオブジェクトでは異なるシステムを使用してください!2つのシステム間の相互作用の記述は、思ったより簡単かもしれません。

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