同人小技巧‎ > ‎

鼠標存取

張貼者:2015年12月22日 晚上7:03人FK   [ 已更新 2018年1月21日 凌晨3:22]
引言
同人世界中有多種不可能的東西,存取鼠標座標是其中之一。(正因為是比較不可能的任務,會比較難理解)
光暈同人陣與鼠標的惟一關係大槪就只有玩家的面向角度吧。沒錯,某FK就是用「人物屬性-面向角色」這個檢查做到的!



基本 - 環狀AI陣:取得人物面向
如要以變數形態儲存人物的面向角度(包括玩家),必須要在地圖的四條邊建立環狀AI陣,再以「人物屬性-面向角色」這個檢查存取。

例:
令玩家p走向鼠標方向

解:

事件{ 設環狀AI於四周,AI代號「RAI*」 }

事件一 重覆99999次 檢查間隔0秒
[檢查] 人物屬性-面向角色 檢查對象:任務/p 面向對象:RAI* 儲存為事件/q
[動作] 趨使走至定點 任務/p 走至 事件/q

整件事現在只需28容量,可參考檔案下載區鼠標控制玩家及環狀AI陣基本檔,但不要公開

應用例子:
1.全方位光印
2.放屁鱷毒劍(比較tricky,連用了兩次檢查面向角色):https://youtu.be/3nE6yrAaLZc




進階 - 偽.居合斬:取得人物面前的第N格
如要取得人物面前的第N格,以做出弄出居合斬之類的效果,就要先建立環狀AI陣,得出一條貫穿「人物(P)」、「鼠標」、「人物面向目標(Q)」的線,再配合section formula,便能得出人物面前的第N格(L),如下圖


現在給一個例題:玩家向前衝3格
在此之前,請確保你已掌握這些技巧:地圖變數、格網座標、section formula

Apply section formula,
L   = (xL,yL)
     = ((r*xq+s*xp)/(r+s),(r*yq+s*yp)/(r+s))


因為是衝3格,r=3。但要計到L,我們還要知道s。但s是多少呢?
'.'PL/LQ=r/s
.'.3/LQ=3/s
.'.s=LQ=PQ-PL=sqrt((xp+xq)^2+(yp+yq)^2)-3
所以我們這兒還需要sqrt()開方函式
誰會猜到開方會在此派上用場OAO
不用怕,你只需要在同人中用URL讀檔讀https://sites.google.com/site/twftechnique/file/library/sqrt%28%29_40000.var?attredirects=0&d=1
中心已經為大家準備好開方0至40000的答案~
只需要sqrt{number}便能回傳正確答案的放大100倍,如sqrt2回傳141、sqrt4回傳200
現在便可以計到L的座標了~任務完成~

應用例子 - 鼠標控制玩家跳躍 (261576) 檔案可在下載區找到



進階 - 鼠標座標化
有了基本槪念,現在來看看如何取得鼠標在地圖上的實際座標吧
在此之前,請確保你已掌握這些技巧:地圖變數、格網座標、二元一次方程( linear equation in 2 unknowns)

整個存取過程需要三個事件,主要是觸發並製作公式,以及解二元一次方程和動作
由於此技術比較難以掌握,所以某FK會透過純理論篩走沒有能力掌挃此技術的作家
設鼠標座標為R(x,y);下面的每個座標全部都要分開兩個變數存

事件一:
儲存玩家目前位置為(xP,yP) 
/*為了避免製作出平行的公式造成無解,不以玩家目前的位置開始。
**如要使用玩家目前位置同時避免平行公式,請分case*/
移動玩家(下稱P)至位置A(xA,yA)

事件二:
儲存目前P所面向的RAI*為q1、其位置為B(xB,yB)
.'.ARB連成一直線,得出公式一
L1:(yB-yA)/(xB-xA)=(y-yA)/(x-xA)                //two point form (中四程度的東西)
       (yB-yA)(x-xA)=(xB-xA)(y-yA)
        (yB-yA)x-(xB-xA)y=(yB-yA)xA-(xB-xA)yA...................(1)
移動P至位置C(xC,yC)

事件三:
儲存目前P所面向的RAI*為q2、其位置為D(xD,yD) 
.'.CRD連成另一直線得出公式二
L2:(yD-yC)/(xD-xC)=(y-yC)/(x-xC)
       (yD-yC)(x-xC)=(xD-xC)(y-yC)
       (yD-yC)x-(xD-xC)y= (yD-yC)xC-(xD-xC)yC.................(2)
只要解了(1)和(2),你便會得出鼠標的座標了~

解方程(1)(2)     //中六程度,去wiki Cramer's rule

最後把玩家放回(xP,yP)

(希望運算沒有出錯,不然我就GG


高階 - 線性回歸鼠標存取 (Linear Regression)

用上面的方法,多拿幾條函式,然後做線性回歸。越多條函式會有越準確的座標
(幹以前都不知道這招,這麼有用的技巧怎麼上到大學才教QAQ)

設你得到的第i條公式(用人物位置Pi、面向角色的位置Qi、鼠標位置R(x,y))為

(Qi.y-Pi.y)/(Qi.x-Pi.x)=(y-Pi.y)/(x-Pi.x)
(Qi.y-Pi.y)x-(Qi.x-Pi.x)y=(Qi.y-Pi.y)Pi.x-(Qi.x-Pi.x)Pi.y
a_i x + b_i y = c_i

在得出N條公式後,建立矩陣

A= ((a_1,b_1),(a_2,b_2),(a_3,b_3),...,(a_n,b_n)) 
R= (x,y)
C= (c_1,c_2,c_3,...,c_n)

然後進行線性回歸,找出最少誤差的點,那個點就是你的鼠標位置

AR = C
A^T AR = A^T C
A' R = C'

Apply 上面提過的Grammer's Rule,你便可以找到R



參考影片:https://youtu.be/wJmzt2oRUpg  (準繩度仍是甚差
應用例子 - 真.冰凝彈:https://youtu.be/-J9n59A3McM (其餘的自己想


環狀AI陣應用例子-放屁鱷毒劍

鼠標存取效果參考

鼠標存取應用例子 - 真.冰凝彈