編輯2: 我想出了大部分問題,但我有一個煩惱。當光標到達屏幕的邊緣並被拉到另一側時,相機會反轉,這將不起作用。有人可以看到如何可以停止?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;
}
這是一個好主意,但我已經想通了,我只是用一個代碼環繞位,所以當鼠標變得接近它被設置回另一側的邊緣,它似乎工作得很好。 – Elec0
我在發佈這篇文章後意識到,我正在考慮一箇舊引擎(從90年代開始)的工作方式。我忘了OpenGL使用它的旋轉度。 – Jackalope
必須有一種方法可以在低於屏幕座標的水平上輪詢鼠標,難道你不這麼認爲嗎?如果是這樣,不管光標是否在屏幕的邊緣,您是否可以檢查鼠標*移動*? – Jackalope