概括地說,在確定出發點與落點後,工坊的**會為我們找到投擲的角度。非常感謝將這個工坊移植到外服的小夥伴albertewang。
按下q
鍵將當前位置設為落點,任意時刻按下ctrl+q
回到落點。
在任意位置,按下shift
鍵獲得投擲方向。
按下e
鍵投擲生物手雷,若它未被阻擋,則一定會墜至落點。
按住滑鼠右鍵
可進入自動模式,此時會出現動態更新的紅色指示器輔助瞄準。
按下r
鍵儲存當前位置,任意時刻按下ctrl+r
傳送到上一次儲存的位置。
出於生活的慣性思維,我猜想生物手雷的軌跡是一段拋物線,於是嘗試驗證。驗證的過程需要兩個引數:投擲速度(\(v_0\))、重力加速度(\(g\))。這些引數都是能夠在工坊中測量得到的。
至此,\(v_0\)、\(g\)成為已知量。之後我嘗試設計了乙個demo,在投擲手雷的同時繪製從玩家朝向出發,初速度為\(v_0\),加速度為\(g\)的拋物線。觀察到拋物線與軌跡幾乎完全重合,猜想成立。
已知投擲角度的情況下繪製軌跡是非常直觀且簡單的,但我們的任務是通過起點、落點、初速度求出投擲角度。儘管用到的都是初等數學知識,後者卻繁雜了許多。
\[\begin
h=v_y t_d - \fracgt_d^2\\
w=(t_d+t_s)v_x\\
-\fracgt_s = v_y \\
v_x^2+v_y^2=v_0^2
\end
\]重力加速度\(g\)與丟擲速度\(v_0\)是常量,已經通過測量得到了。因為丟擲位置與落點是手動設定的,我們可以通過它們的向量得到\(h\)與\(w\)。
\[\begin
g = 10\ m/s^2 \\
v_0 = 30\ m/s \\
h = pos.y - dest.y \\
}\end
\]剩餘共四個未知數,我們剛好有四個等式,於是能夠得到:
\[\begin
\\v_y=\pm\sqrt
\end
\]接下來我們解一元二次方程,這裡只需要向上拋的那乙個解就好了。得到\(v_x\)、\(v_y\)後,將它們分解為三維空間中的單位方向向量即可。
在匯出投擲角度的中間步驟中我們用到了所需的兩段時間\(t_s\)、\(t_d\),遺憾的是在實現的過程中它們已被消除。不過在已經求出\(v_y\)的情況下,滯空時間的計算也很便捷。將拋物線的運動分為兩部分:
從起點到最高點
從最高點到落點
這兩部分在豎直方向上均可視作自由落體運動。對於前一段我們已知最大速度\(v_y\),則\(t_1=\frac\);對於後一段我們能夠求出豎直方向上的位移,則\(t_2=\sqrt}\),其中\(h_p=\fracgt_1^2\),而\(h\)為起點與落點在豎直方向上的高度差。最終用時為:\(t_1+t_2\)。
實踐出真知,許多問題只有行動起來以後才能夠被發現。
地圖工坊的數字在\(x\)正半軸的表示範圍為\([10^, 10^8]\)。測試時發現在對一般規模的輸入引數進行運算的過程中,部分中間值遠大於\(10^8\) 。為了能夠得到正確答案,我們可以將所有的中間值乘以\(10^\),將小數字利用起來。在玩家尺度下,一定的的誤差是能夠接受的,**中的這個值是\(10^\)。最終我們的**滿足了一般尺度下的求解需求。
通過射線命中位置
命令,我們可以得到玩家瞄準的目標座標;但直接將玩家傳送到該座標是極其不負責任的,玩家有可能因穿模被傳送到牆體後方、落入地下、卡入牆體中。有兩個簡單的候選方案:
方案一方案二
改進新增最近的可行走位置
約束
通過射線命中法線
修正傳送點
優點一定能夠傳送到安全的位置
誤差較小
缺點無法上高台且誤差較大
可能會卡入牆體
無法上高台是致命的缺點,所以最終採用了方案二。但兩個方案並不完全互斥,我們可以嘗試在檢測到玩家卡入牆體時將其傳送至最近的可行走位置。目前的傳送功能還是非常好用的,測試的過程中完全沒有遇到問題。
守望先鋒 子程式分享
個人理解 子程式相當於你事先寫好了一條規則,在需要的時候調子程式直接用就行,主要用來減少重複的 單獨抽取出來重複的 寫成子程式 案例多難度的跑酷圖,難度文字顯示 難度其實就是乙個變數不同的值而已,比如玩家變數a 0的時候是c難度,a 1的時候是b難度,這時候我們可以根據變數a來決定不同難度的點位或者...
守望先鋒中你不知道的秘密
學號 16340098 學院 資料科學與計算機學院 2對於廢鼠跟狂鼠問題 3距離不同每個人的傷害也不同我們用 形式直觀明了的表示 4對於遊戲中的一些小技巧 原文參考 有好多人反映,狂鼠好難玩呢,玩好的都是學霸,拋題運動學的超好,那麼我們就來研究一下狂鼠炸彈的拋物線軌跡。其實這只是乙個簡單的拋體運動公...
解決遊玩守望先鋒時出現 渲染裝置已丟失
解決遊玩守望先鋒時出現 渲染裝置已丟失 cpu amd3600 顯示卡 rtx2060 在打守望先鋒的時候出現 渲染裝置丟失。並強制退出遊戲2.安裝experience 安裝位置無所謂,反正一會兒要解除安裝 一定要勾選 執行清潔安裝 3.開啟nvidia控制面板 1.先恢復,然後點選全域性設定 op...