troytroytroy 发表于 2019-9-18 12:51:49

三論潛行效果 [簡略說明版]

在下曾經寫過兩篇關於潛行效果實現方法的帖子,第一種是用 up 1.4 的AI效果實行:https://www.hawkaoe.net/bbs/thread-136622-1-1.html
此方法需要用寫相當多的AI碼來設定阻擋物的位置,因此AI語句數量可能需要幾百行,工作量較大。

第二種是用 MOD 結合004觸發來處理:
https://www.hawkaoe.net/bbs/thread-140289-1-1.html
這部分需要判斷每個監視士兵有沒有看到某物件,觸發量為 8n 的倍數,因此在士兵數 n 很大時工作量也會有近百觸發。相對也是工作量較大。

這裡介紹第三種方法,此方法能將工作量縮減到一個下午茶的時間就能完成約60人的監視系統。在講解方法前,建議讀者複習一下TT的up 1.3 AI教程:
https://www.hawkaoe.net/bbs/thread-118721-1-1.html
這篇帖子中講解了不少概念,其中一個為"測量地圖上兩點之間的距離"。從小學數學可以知道,兩點之間的最近距離為直線,換言之,如果我們測量一個單位從A走到B之間的最短距離,中間有障礙物時,這個距離必定會大於直線。想像這個走的單位是光子,則"距離大於直線"="視線被遮蔽"。

拜up 1.5的語句所賜,我們現在用"up-get-path-distance"就足以計算出兩點路徑距離。因此只要利用原本1.3的距離檢測與這個新語句,我們就可以製作出潛行效果,並且此效果工作量少很多。

至於監視單位是否面向被監視單位,這部分則仍必須要結合004的新效果。在下有時間會寫一篇較為詳細的教程解說。

newtonerdai 发表于 2019-9-22 17:12:10

确实,我在学习UP 1.5 新AI语句时,把up-get-point-distance(计算两点直线距离)跟up-get-path-distance(测算两点行走路程)混淆了,但是没有意识到后者在检测障碍物上的应用。

(果然,几何知识全还给老师了{:167:})

福州游侠 发表于 2019-9-25 16:23:31

啥是潜行?

我是谁004 发表于 2019-9-26 21:14:49

测试了一下,我发现up-get-path-distance的计算时是以格子为单位的,也就是说路程长没有小数部分。此外,它到目标点的路径路程不是通常意义上的欧拉距离,而是切比雪夫距离(直一格与斜一格都算作1),同时会随着位置的偏移而有所误差。
如下所示,被遮挡的亲兵计算到(0, 0)的距离时仍为7(应该为8),实际路程约为10。


troytroytroy 发表于 2019-9-26 23:23:28

我是谁004 发表于 2019-9-26 21:14
测试了一下,我发现up-get-path-distance的计算时是以格子为单位的,也就是说路程长没有小数部分。此外,它 ...

這樣一來也可以做,只是up-get-point-distance就要換成計算兩者位置點,然後一樣取
L∞ 距離,根據三角不等式還是可以達成效果。只是以格為記本來就會稍微有誤差就是了。

troytroytroy 发表于 2019-9-26 23:32:49

troytroytroy 发表于 2019-9-26 23:23
這樣一來也可以做,只是up-get-point-distance就要換成計算兩者位置點,然後一樣取
L∞ 距離,根據三角不 ...

想了一下,發現L∞ 距離的三角不等判斷距離的能力很差。看樣子還要額外改良。
页: [1]
查看完整版本: 三論潛行效果 [簡略說明版]