說到記憶這個詞我們肯定會想到人本身,一個人通過感官獲取到外部信息以後,就會存儲到大腦當中,形成了長期或者短期記憶。比如看到的、聽到的、聞到的、觸碰到的都能存儲到大腦當中。
對于腳本來說,就沒有這麼複雜了,主要就是看到的,包括圖片、文字。那麼我們怎麼去記憶以及怎麼提取記憶使用,就是這篇文章要講的主要内容了。
我們先來看看“文字的記憶“,很多軟件都有配置文件,那個其實就具有記憶功能,對于按鍵精靈安卓版來說,最簡單的方式就是通過文本記錄,常用到的命令就是寫入命令。我們先來看一段代碼:
dim a="我要記憶的内容"dim path="/sdcard/pictures/1.txt" //"我要存儲的位置是雷電模拟器的共享文件夾當中的1.txt這個文本當中"file.write(path,a)當我運行這段代碼之後,在共享文件夾裡面會出現一個1.txt文本,文本内容為"我要記憶的内容",這就實現了“記憶”功能。
對于記憶來說,我們簡單分成了短期記憶和長期記憶。
短期記憶是上面代碼中的file.write命令,之所以叫它短期記憶,是因為隻要二次運行這個命令,原來的内容就會被新的内容覆蓋,多次運行以後,就隻保留了最後一次運行的内容,所以叫它短期記憶。
當然不是說用了file.write命令就一定是短期記憶,如果每次存儲的文件名不同,它也可以變成長期記憶。我們看一下代碼:
dim arr=array("我要記憶的内容1","我要記憶的内容2","我要記憶的内容3")dim path="/sdcard/pictures/" //"我要存儲的位置是雷電模拟器的共享文件夾"For i = 1 To 3file.write(path&i&".txt",arr(i-1)) Next運行這段代碼以後,就會在文件夾裡面生成3個文本,因為名字不同,所以它們不會互相幹擾,避免了被覆蓋的可能,從而形成了長期記憶。
我們再說一下另外一種長期記憶,就是在同一個文本裡面插入内容,并且保留原始内容,常用命令是file.writeline。這個命令可以執行在文本的某一個行裡面添加内容,不會覆蓋掉原來的内容。
我們來看一下代碼:
dim arr=array("我要記憶的内容1","我要記憶的内容2","我要記憶的内容3")dim path="/sdcard/pictures/1.txt" //"我要存儲的位置是雷電模拟器的共享文件夾1.txt"For i = 1 To 3file.writeline(path,1,arr(i-1)) Next通過運行代碼我們可以看到1.txt這個文本裡面有3行内容(看下圖),就是我們要記錄的内容,這個命令需要特别注意,必須要在運行代碼前,文件夾裡面一定要有對應的文本文件,命令不會新建文件,如果沒有對應的文件,就會報錯。
當然上圖當中,我們可能會看到文本内容是3、2、1這個順序,這是因為每次存儲的時候都會插入第一行,所以後插入的内容,就會在第一行,如果我們想要在最後一行插入,就需要每次獲取當前文本中一共有多少行,然後再去指定的最後一行插入内容。
還是看一下代碼:
dim arr=array("我要記憶的内容1","我要記憶的内容2","我要記憶的内容3")dim path="/sdcard/pictures/1.txt" //"我要存儲的位置是雷電模拟器的共享文件夾1.txt"Dim line //行号For i = 1 To 3line = file.LinesNumber(path)file.writeline(path,line,arr(i-1)) Next
寫到這裡是不是有人覺得長期記憶要比短期記憶好,以後如果用到“記憶”這個功能的時候,就用長期記憶,其實這麼想是不對的,這個要根據具體的需要,對于短期記憶來說操作更簡便,因為隻有一個内容,也避免了幹擾項,使用的時候不容易出錯。至于使用哪種方式沒有固定的,有的時候甚至是長期和短期記憶同時使用。
說到使用了,那麼我就來看看怎麼提取這個“記憶”,在命令庫裡面我們是有file.read、file.readline、file.readlines命令,它們都是讀取命令,關于命令的介紹,大家可以直接看命令庫,我來說一下,提取的思路。
Dim m=file.read("/sdcard/pictures/1.txt")If m = null Then TracePrint "因為文本是空的,這是首次記憶内容" Else TracePrint "讀取的内容是:"&m End If這段代碼除了有讀取功能外,還有判斷功能,這個就是提取的思路,不是簡單的讀取。
分析一下這段代碼,我主要寫了讀取1.txt這個文本,然後對讀取的内容進行判斷是不是空白的,如果是空白的,說明之前沒有“記憶”過内容,腳本是首次使用,如果有内容,我就把内容輸出來,可以清楚的看到内容是什麼,之後腳本就可以根據内容來執行下一步具體的功能。
如果想要實現更複雜的功能,可以把文本内容賦予特定的意義,比方說,讀取到的文本是1,就讓腳本執行第一個功能,讀取到的文本是2,就讓腳本執行第二個功能,以此類推,可以給腳本賦予無限多的可能性。
關于文字記憶功能差不多就是這些内容,但是在實際應用的過程中,很可能是多次存儲以及多次提取的混合使用,對于提取的内容二次處理也是非常重要的,還有涉及到大量的判讀處理,我們在學習過程中要不斷練習,培養自己的編程思維。
下面說一下圖片記憶功能:
對于“記憶”這個功能,其實就是兩個操作——存儲和提取。
圖片的存儲我們用snapshot命令,提取我們就用找圖命令。
先來看一個例子
我想要截取“賬戶”這個位置的圖片。
SnapShot "/sdcard/pictures/1.png",70,388,111,416
生成了一個叫做1.png的圖片,這個圖片就是我剛剛截圖保存的。如果你想要“長期記憶”那麼每一次截圖的文件名都要不同,否則就會被覆蓋變成了“短期記憶”。
在提取記憶的時候我們是用找圖命令,我們通常找圖命令是這樣寫的
圖片先要手動放到按鍵精靈的附件裡面,之後在代碼當中填寫圖片路徑"Attachment:1.png",這樣才能找到指定的圖片。我們這篇文章講的是腳本自己記憶,肯定不能用手動添加附件的方式,那麼我就要修改找圖命令的圖片路徑了,其實找圖命令是支持手機(模拟器)文件路徑的,也就是說上面的代碼我們在不添加附件的情況下,可以寫成這樣:
Dim intX, intYFindPic 0, 0, 0, 0, "/sdcard/pictures/1.png", "000000", 0, 0.9, intX, intYIf intX > -1 And intY > -1 Then TracePrint "找到圖了"End If這裡的圖片路徑是"/sdcard/pictures/1.png",和我之前截圖的路徑是完全一樣的了。那麼我們就可以把存儲和提取結合在一起,形成完整的記憶了。
Dim intX, intYDoFindPic 0, 0, 0, 0, "/sdcard/pictures/1.png", "000000", 0, 0.9, intX, intYIf intX > -1 And intY > -1 Then TracePrint "找到圖了,記錄一下當前的位置"Delay 500SnapShot "/sdcard/pictures/1.png",70,388,111,416Exit DoElse TracePrint "沒有找到圖,要往上滑動了"Delay 500Swipe 200,600,200,500,1000End IfDelay 1000Loop這段代碼完成的功能是每次找到圖以後,記錄一下當前指定位置的圖片,保存到指定路徑,這樣當腳本出現錯誤,或者手動關閉,再次開啟的時候,就可以知道上次腳本運行到哪個“畫面”了。
我的代碼是把截圖命令放到找圖命令裡面,實際腳本可能會放在完成某個具體的功能後面,比如聊天軟件當中和某個人對話後,截取對方頭像保存下來,下次在進入聊天窗口以後,可以通過判斷畫面中有沒有截圖存儲的頭像,來判讀是不是之前進行過對話。
最後我想說,關于記憶功能在實際應用當中,不同場景的應用代碼是不同的,所以大家不要單純的套用上面我寫的代碼,要學會舉一反三。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!