トップダウンRPG運動w /修正?


27

ゼルダ:過去へのリンクをプレイしたことを願っていますが、間違っている場合は修正してください。しかし、そのような2D、トップダウンのキャラクターの動きを少し修正してエミュレートしたいと思います。他のゲームでも行われていますが、この参照が最も簡単に関連していると思います。より具体的には、私が話している動きと修正の種類は次のとおりです。

  • ポケモンなどのタイルベースの動きに限らず、動きパッドを1回タップすると、その基本方向に1マス移動するフローティング動作。このフローティング動作は、斜めの動きを実現できるはずです。
  • 西を歩いていて、北東/南西方向に斜めの壁に来ると、コントローラーの左(西)を押し続けても、南西​​の動きに修正されます。これは、両方の方向で修正する両方の対角線で機能するはずです。
  • ドアや廊下に向かって真っ直ぐ歩いて数ピクセル離れている場合、廊下を歩いたり廊下を歩いたりするように修正されます。つまり、角にぶつかるとホール/ドアに押し込まれます。

私はこれを達成するための効率的な方法を探しましたが、運がありませんでした。明確にするために、私はNPCの動きではなく、人間のキャラクターの動きについて話しています。この種の運動に関する彼らのリソースは利用可能ですか?Wikiまたは何かで説明された方程式またはアルゴリズム?

XNA Frameworkを使用していますが、これを支援するものはありますか?

回答:


23

さて、最初の箇条書きは簡単です。タイルベースの座標ではなく、ワールド座標またはピクセル座標でキャラクターの位置を保存して操作するだけです。これに問題がある場合、それはあなたの世界とタイルスペースの表現の混乱した選択による可能性があります。

2番目のポイントでは、最も直接的なアプローチは、プレーヤーの(正規化された)動きベクトルを取得し、それを壁の法線ベクトルに追加してから、再正規化することです。結果のベクトルのコンポーネントの記号は、壁がプレーヤーの動きにどのように関連するかを示し、ベクトル自体はプレーヤーが現在どの方向に移動できるかを示します。

3番目のポイントでは、壁とプレーヤーの両方に衝突長方形があると仮定すると、プレーヤーの衝突長方形が壁の衝突長方形と接触する量を決定できるはずです。たとえば、プレーヤーが右に移動して垂直の壁にぶつかった場合、衝突長方形のY軸の範囲を比較します-プレーヤーの範囲が壁の範囲をあるしきい値、たとえばプレーヤーのYの75%を超える場合軸の範囲、その後、あなたはドアに向かってプレイヤーを「チート」。

ここでは、主に質問の一般性により、オブジェクトモデルがコード内でどのように見えるか、どのテクニックを選択したかについてかなりの数の仮定を立てました。同じ理由で、(おそらく最適ではないかもしれませんが)単純なアプローチを提案しようとしました。この質問または新しい質問のいずれかで、より具体的な情報を提供できる場合は、詳細またはより良いアイデアを提供することができます。


ええ、キャラクターを浮かせても問題ありませんでした。人々がそれが要件であることを確認するだけです。あなたは私に重要な答えを与えました:ベクトルを持つタイル!私はそれを考えなかったとは信じられません。ありがとうございました。
コーリーオグバーン

ゼルダでは、角度が1つしかありませんでした。したがって、法線ベクトルを計算する必要はありませんでした。これはコードの特殊なケースにすぎませんでした。
BlueRaja-ダニーPflughoeft

タイルにベクトルを与える方法がわかりません。それはどのように見えるでしょうか?
テスト14年

タイルには、おそらく、グラフィックのようなデータがあり、それが無難かどうかなどがあります。これは単なる別のフィールドです。例:struct Tile {vector2 normal; ...}法線の値には、タイルを定義するデータが必要です
ジョシュ

@JoshPetrieこれを復活させる。複数の方向で衝突できるタイルには、複数のベクトルが必要ではないでしょうか?タイルが単一のベクトルを持つ方法を理解しているかどうかはわかりません。
テスト

4

2番目のポイントの可能な答えは、ドット積(ab * normalized(b))を使用してプレーヤーの動きベクトルを壁ベクトルに沿って投影することです。次に、プレーヤーを壁の方向にどれだけ移動するかを示すベクトルを取得します。そのベクトルだけプレーヤーを移動すると、壁に沿って「スライド」を取得します。以前のゲームプロジェクトで私のためにうまくいった。


3

Joshの素晴らしい答えですが、いくつかの提案を追加します。-壁に対するスライドの詳細については、チェックアウトしてください。 、私の質問をて。-間違っていない場合、画面を上に移動すると、リンクは最も近い水平グリッド全体に簡単に整列します。この方法でドアに着くと、適切に並んでいる可能性が高くなります(間違っている可能性があります)。-ドアを簡単に通過できるようにするには、キャラクターのコリジョンボックスがドアの幅よりもかなり小さいことを確認してください。


または、衝突ボックスはおそらく円ですか?
オスカーデューブボーン

2

入ってくるドアを修正するには、ドアの衝突オブジェクトをドアの画像よりもわずかに大きくすることができます。これにより、ジョシュが提案したのと同じ効果が得られますが、壁の衝突長方形への近接度を計算する必要はありません。

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