第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在單人游戲中處理第一人稱游戲的鼠標

在單人游戲中處理第一人稱游戲的鼠標

C#
千萬里不及你 2022-12-24 10:13:46
我正在嘗試在 Monogame 上制作第一人稱游戲,但到目前為止,我所擁有的或在互聯(lián)網(wǎng)上找到的所有內(nèi)容都不符合我的標準。這就是我目前處理鼠標的方式:        private void HandleMouse()        {            Vector2 mouseDifference;            mouseNow = Mouse.GetState();            if (mouseNow.X != mouseDefaultPos.X || mouseNow.Y != mouseDefaultPos.Y)            {                mouseDifference.X = mouseDefaultPos.X - mouseNow.X;                mouseDifference.Y = mouseDefaultPos.Y - mouseNow.Y;                leftrightRot += mouseSens * mouseDifference.X;                updownRot += mouseSens * mouseDifference.Y;                Mouse.SetPosition((int)mouseDefaultPos.X, (int)mouseDefaultPos.Y);                UpdateViewMatrix();            }        }        private void UpdateViewMatrix()        {            Matrix cameraRotation = Matrix.CreateRotationX(updownRot) * Matrix.CreateRotationY(leftrightRot);            Vector3 cameraOriginalTarget = new Vector3(0, 0, -1);            Vector3 cameraOriginalUpVector = new Vector3(0, 1, 0);            Vector3 cameraRotatedTarget = Vector3.Transform(cameraOriginalTarget, cameraRotation);            Vector3 cameraRotatedUpVector = Vector3.Transform(cameraOriginalUpVector, cameraRotation);            viewMatrix = Matrix.CreateLookAt(new Vector3(0,0,0), cameraRotatedTarget, cameraRotatedUpVector);        }我的問題是,雖然此解決方案有效,但在相機應旋轉(zhuǎn)多遠方面卻極為不一致。例如,當我用鼠標畫圓圈時,會發(fā)現(xiàn)有時鼠標隨機跳動的次數(shù)超出預期。我的主要假設是 fps 的不一致導致幀之間的時間發(fā)生變化,從而影響鼠標在該時間內(nèi)可以移動的距離。我不知道這是否是原因,或者我的假設是否會導致這種情況,但我想找到一種方法來獲得一致的鼠標移動。如果需要,我可以提供問題的視頻。先感謝您。
查看完整描述

2 回答

?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

Windows 中的鼠標每秒更新 240 次。游戲循環(huán)以每秒 60 幀的速度運行。這種差異會導致較大的鼠標增量。解決方案是限制鼠標增量的變化:


Vector2 mouseDifference;

const float MAXDELTA = 6; // Set to the appropriate value.

mouseNow = Mouse.GetState();

if (mouseNow.X != mouseDefaultPos.X || mouseNow.Y != mouseDefaultPos.Y)

{

    mouseDifference.X = Math.Min(MAXDELTA, mouseDefaultPos.X - mouseNow.X);

    mouseDifference.Y = Math.Min(MAXDELTA, mouseDefaultPos.Y - mouseNow.Y);

    leftrightRot += mouseSens * mouseDifference.X;

    updownRot += mouseSens * mouseDifference.Y;


    Mouse.SetPosition((int)mouseDefaultPos.X, (int)mouseDefaultPos.Y);


    UpdateViewMatrix();

}


查看完整回答
反對 回復 2022-12-24
?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

這是一個舊線程,但我想我會分享一個解決方案。對我有用的解決方案是使用 GameTime 對象來關聯(lián)玩家應該旋轉(zhuǎn)多少。換句話說,按 (delta * rotationSpeed * GameTime.ElapsedTime.TotalSeconds) 旋轉(zhuǎn),以便每次旋轉(zhuǎn)都與自上一幀以來經(jīng)過的時間有關。這可以防止丟幀,我發(fā)現(xiàn)這對我來說是個問題。



查看完整回答
反對 回復 2022-12-24
  • 2 回答
  • 0 關注
  • 102 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號