2011-07-23 9 views
2

Edit2: 私は問題の大部分を理解しましたが、私には1つの迷惑があります。カーソルが画面の端に達して反対側に引っ張られると、カメラが動き、動作しません。誰かがそれを止めることができるかを誰かが見ることができますSFML 3D MouseLook

bool attention = true; 
    Vector2 p, mousePos; 
    private float MOUSE_SENSITIVITY = 4.0f; 

    private void OnMouseMove(object sender, MouseMoveEventArgs e) 
    { 
     float DeltX = 0, DeltY = 0; 
     int border = 2; 
     Console.WriteLine(attention + ""); 

     if (attention == true) 
     { 
      p.X = e.X; 
      p.Y = e.Y; 

      DeltX = (float)(mousePos.X - e.X)/MOUSE_SENSITIVITY; 
      DeltY = (float)(mousePos.Y - e.Y)/MOUSE_SENSITIVITY; 
     } 
     else 
     { 
      mousePos = p; 
     } 

     attention = true; 

     if (e.X > App.Width - border) 
     { 
      attention = false; 
      App.SetCursorPosition((uint)border, (uint)e.Y); 
      DeltX = 0; 
      DeltY = 0; 

     } 
     else if (e.X < border) 
     { 
      attention = false; 
      App.SetCursorPosition((uint)(App.Width - border), (uint)e.Y); 
      DeltX = 0; 
      DeltY = 0; 

     } 

     if (e.Y > App.Height - border) 
     { 
      attention = false; 
      App.SetCursorPosition((uint)e.X, (uint)border); 
      DeltX = 0; 
      DeltY = 0; 

     } 
     else if (e.Y < border) 
     { 
      attention = false; 
      App.SetCursorPosition((uint)e.X, (uint)(App.Height - border)); 
      DeltX = 0; 
      DeltY = 0; 

     } 



     Cam.RotateY(DeltX); 
     Cam.RotateX(DeltY); 


     mousePos = p; 

    } 

答えて

0

私はまだ自分のスピードを上げていますので、塩の粒でこれを取ってください。 (私は試しています!)

あなたのマウスの動きはピクセルで測定されたと思います&これはカメラの完全な回転に変換されます。 0.4で割って(MOUSE_MOVEMENT)、「0.4完全回転」の倍数に影響します(152ピクセル/04 = 380回転、開始方向と同じ方向に向いているなど)

0.4 &の代わりに256で除算して、それがうまくいくかどうかを確認してください。

+0

、それはかなりうまくいくようです。 – Elec0

+0

これを投稿した後、私は古いエンジン(90年代のエンジン)の仕組みを考えていました。私は、OpenGLが回転のために度を使用していることを忘れています。 – Jackalope

+0

画面座標より低いレベルでマウスをポーリングする方法がなければならないと思いませんか?もしそうなら、カーソルが画面の端にあるかどうかにかかわらず、マウス*動き*をチェックできませんでしたか? – Jackalope

0

通常、各フレームのウィンドウの中央にマウスの位置を設定します。以前はマウスの位置に読み込んでウィンドウの中心を引いた。この方法で、ウインドウの枠線を気にすることなく、各フレームのマウスの動きを簡単に取得できます。私はすでにそれを考え出したが、私は、単にコードのラップアラウンドビットを使用したマウスは、エッジに近づくとき、それが戻って反対側に設定されます、良いアイデアです

Vector2i center(window->getSize().x/2, window->getSize().y/2); 
Vector2i delta = Mouse::getPosition(*window) - center; 
Mouse::setPosition(center, *window);