0

私はdirectxにかなり慣れていないので、これは本当に基本的に聞こえるかもしれません。

私はあなたが部屋を歩き回ることができる一人称ゲームに取り組み始めました、私がコーディングしている言語はc ++であり、私は私のゲームを作成するのを助けるためにdirectxを使用しています。

これまでのところ、すべての部屋にドアなどが描かれていますが、一人称カメラを作成し、ユーザーがキーボードの矢印キーを使用して前後左右に移動できるようにする方法が少し詰まっています。

私は初心者なので、シンプルな方がいいです。

誰かがこれを手伝ってくれるか、正しい方向に私を向けることができますか?

前もって感謝します

4

2 に答える 2

3

このトピックをカバーするチュートリアルがWebにたくさんあるので、Googleは確かにあなたを助けます。

基本について:あなたはあなたの位置とカメラの回転を保存したいと思うでしょう。Zが上軸であるとすると、矢印を使用してXとYのみを変更する必要があります。

また、カメラの向きを保存する場合、Z軸(移動方向)とX軸(上下を見上げる)に沿った回転の合成として保存されるとします。

単純なクラス:

class Player 
{
protected:
    float3 Position; // Z-up
    float2 CameraRotation; // X for turning, Y for up-down
public:
    void MoveForward()
    {
        Position.X += -cosf(CameraRotation.X) * PLAYER_SPEED;
        Position.Y += -sinf(CameraRotation.X) * PLAYER_SPEED;
    }
    // when using any other arrow, just add a multiply of PI/2 to the camera rotation
    // PI for backwards, +PI/2 for left strafe and -PI/2 for right strafe.
    // If you don't want to use mouse, use left and right arrow to modify camera rotation
    // and MoveForward and Backward will look the same, having different signs.
};

sinf関数とcosf関数の前にある「-」記号は、おそらくこの種の動作が必要になるためです。自由に変更してください。

カメラに関しては、フレーム間にマウスデルタを実装する必要があります。すべてのフレームで、マウスの位置を前の位置と比較します。次に、回転して速度を見てそれを乗算し、カメラの値に直接設定します。

これがお役に立てば幸いです。

于 2011-11-07T21:34:35.087 に答える
1

私はもっ​​とOpenGLの人なので、技術的な面であなたを助けることはできません。私にできることはあなたに方向性を与えることです。

一般に、3Dカメラには次のものがあります。

翻訳-カメラがどこにあるか(x、y、z)

回転-各軸を中心としたカメラの角度

あなたがしたいことは、翻訳部分だけに関連しています:

  1. ユーザー入力を監視し、矢印キーの1つを押したときにキャプチャします。
  2. 矢印キーが下がっているときに、カメラの移動の変更を開始します。ユーザーが上キーを押すと、キーを離すまで、メインゲームループの各反復で対応するカメラ変換コンポーネント(x)に定数値が追加されます。彼が下キーを押した場合は、その値を加算するのではなく減算する必要があります。
  3. 彼がキーを離すと、コードはその値をカメラの変換に追加するのを停止する必要があります。

ゲームが60Hzで実行され、たとえば、ユーザーが行きたい方向ごとに、反復ごとにカメラの移動に1/60単位を追加するとします。ユーザーが上矢印キーを2秒間押し続けると、カメラは2ユニット前方に移動します。

これは一般的な「理論」です。今では、問題の技術的な側面を解決するのに役立つ可能性のあるWebページのみを紹介できます。

DirectXカメラの動き-この記事には必要以上のものがあると思いますが、見た目はかなり良かったので、とにかく読むべきだと思います...しかし、ビュー変換の部分にスキップできます。

入力処理-言うまでもなく、通常のWin32入力処理。win32の入力処理に慣れていない場合は、最初にそれを学ぶのに1、2時間かかると思います。

了解しました。お役に立てば幸いです。

于 2011-11-07T21:33:25.453 に答える