tft每日頭條

 > 圖文

 > 光遇腳本跑圖怎麼用

光遇腳本跑圖怎麼用

圖文 更新时间:2024-12-22 11:07:15
前言

經過前面2篇文章的學習理解,相信大家對遊戲腳本有了一定的了解。今天我們就基于按鍵精靈的多點找色函數打造适用于我們自己的找色函數。

按鍵精靈的多點找色函數

/*這是按鍵精靈自身的多點找色函數,原理就是根據你提供的顔色描述去對找當前屏幕像素, 和指定的顔色進行對比,找到了就返回指定顔色的坐标,沒找到就返回 -1, -1 x1,y1 : 要找區域左上角坐标 x2,y2 : 要找區域右下角坐标 first_color : 要對比的顔色,就是參考顔色,也是要返回的坐标顔色 offset_color : 要比對的多個點的顔色描述 dir : 查找方向,一般默認0,從左上到右下 sim : 對比相似度,一般默認0.9,再大不容易找到,太小容易找錯 intX,intY : 返回的坐标 */ Dim intX, intY FindMultiColor(x1, y1, x2, y2, first_color, offset_color, dir, sim, intX, intY)

按鍵精靈給我們提供的這個函數隻能滿足基本需求,對我們而言還遠遠不夠,我們期望能結合我們之前打造的點擊函數結合起來進行使用。

開始打造非常棒的多點找色函數

初級設計:把多點找色當做判斷條件

顧名思義,就是通過多點找色返回bool值,如果返回true我們做什麼,如果返回false我們做什麼,這樣把函數當做判斷條件會方便我們進行更多的動作。

//多點找色并返回真假 Function multiFindColor(x1, y1, x2, y2, first_color, offset_color) Dim intX, intY //定義2個變量 KeepCapture //截圖保存至内存中,大幅度提升找色速度 FindMultiColor(x1, y1, x2, y2, first_color, offset_color, 0, 0.9, intX, intY) //固定尋找方向和相似度 ReleaseCapture //釋放内存中的圖片 If intX > -1 Then //點返回值大于-1說明找到坐标,函數返回真 multiFindColor = true Else multiFindColor = false End If End Function

實例:找雷電中心

光遇腳本跑圖怎麼用(教你寫手遊腳本)1

尋找雷電遊戲中心

複制右側的"選取範圍"内容和"多點找色-顔色描述"的内容

//打印函數返回内容 TracePrint multiFindColor(230, 207, 323, 294, "1FC5F4", "0|-13|000000,-23|-37|1FC5F4,22|-31|1FC5F4,1|-15|000000")

進階設計:需要返回坐标方便我們配合點擊函數

有時候我們找到了目标,還希望能把那個目标的坐标值也給我們,方便我們調用click函數,這時候我們需要再造一個能返回坐标的函數。

疑惑1:為什麼我沒有把點擊函數寫入找色函數裡面?

為了解除函數與函數之間的耦合性,或者說達到一個松耦合的效果,什麼叫耦合?就是相互關聯性,一個獨立的函數适用性遠遠大于一個關聯緊密的函數。

疑惑2:這麼設計有什麼好處?

假設你想要找的目标是右上角,而你要點擊的地方是左下角,這時候使用這個函數就非常棒,我們隻要專注找色就是找色,點擊就是點擊就可以了。

/*多點找色并返回坐标 x1,y1 : 要找區域左上角坐标 x2,y2 : 要找區域右下角坐标 first_color : 要對比的顔色,就是參考顔色,也是要返回的坐标顔色 offset_color : 要比對的多個點的顔色描述 */ Function colorPoint(x1, y1, x2, y2, first_color, offset_color) Dim intX, intY, retArray //定義3個變量 KeepCapture //截圖保存至内存中,大幅度提升找色速度 FindMultiColor(x1, y1, x2, y2, first_color, offset_color, 0, 0.9, intX, intY) //固定尋找方向和相似度 ReleaseCapture //釋放内存中的圖片 If intX > -1 Then //找到目标返回數組 retArray = Array(intX, intY) Else //沒找到目标返回-1,-1 retArray = Array(-1, -1) End If //返回retArray數組 colorPoint = retArray End Function //根據返回坐标數組進行點擊動作 Dim ret, x, y //用上面雷電的特征信息做例子 ret = colorPoint(230, 207, 323, 294, "1FC5F4", "0|-13|000000,-23|-37|1FC5F4,22|-31|1FC5F4,1|-15|000000") x = ret(0) y = ret(1) //TracePrint x,y click(x 60, y 350, 5) //最後點擊了剪映

實例:我想通過雷電的圖标來定位,但是最後點擊的必須是剪映的位置

光遇腳本跑圖怎麼用(教你寫手遊腳本)2

通過雷電中心找剪映

很多時候因為遊戲的不規則性,我們想找的目标是漂浮不定或者透明無法确定的,這時候我們就需要找到其他靜态的其他區域來幫我輔助完成動作。

這樣設計也有弊端:

由于按鍵精靈無法直接返回多個返回值,所以隻能通過數組的方式接收和傳出。這并不是一個很理想的設計,顯得很繁瑣。雖然解除了函數之間的耦合性,但是增加了需要編寫的代碼量,不過從實際使用來來說,因為使用頻次不高,又能有效解決無法直接定位的問題,這依然是一個不錯的設計。(也可以用一個sub來把這個流程包裹起來。)

Sub 依雷電找剪映() //根據返回坐标數組進行點擊動作 Dim ret, x, y //用上面雷電的特征信息做例子 ret = colorPoint(230, 207, 323, 294, "1FC5F4", "0|-13|000000,-23|-37|1FC5F4,22|-31|1FC5F4,1|-15|000000") x = ret(0) y = ret(1) //TracePrint x,y click(x 60, y 350, 5) //最後點擊了剪映 End Sub call 依雷電找剪映()

終極設計:對于隻能找動态圖,時不時又找不到目标,怎麼辦?

這是一個比較少見的特殊情況,但是不排除這種情況的存在。

最近在做的一款遊戲就經常碰到這樣的情況,整個頁面都是畫上去的,同一個界面每次找色都不一樣,不過由于使用的不是按鍵精靈解決方案,很快就把這個問題解決了。

設計一個函數,使用循環對一個存儲了找色數據的數組進行遍曆找色,找到了返回真假,或者返回坐标。

暫時沒找到比較有效的實現方法,一是由于按鍵精靈是基于VB設計的産物,上個世紀的老語言,很多時候設計都有局限性;二是有我自身的技術有限無法找到一個相對很棒的實現方法。

那遇到這樣的情況怎麼辦?

1. 更換解決方案,不使用按鍵精靈,換其他方式;

2. 盡可能的去找靜态穩定的目标;

結語:

在設計函數時,我們應該更多的考慮函數的可擴展性和複用性,而不是單純的把一串代碼拼湊起來,這樣一沒設計感,二沒有靈魂!要記住沒有最好的代碼,隻有适用的代碼。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved