在開發自己的腳本時,可能會有一些經常使用的判斷式,
像是我們先前提到的:“當存在影像時,點擊該影像” 的判斷式。

if (find(“res/20190809-131033.png”)) {

click(“res/20190809-131033.png”);

} else {

print(“沒有找到”);

}

那如果我的腳本有很多地方都用到這個算式,
每個地方都要重複寫一次,是不是太累啦?
好在Blackey Script支援自定義函數的功能,
現在讓我們看看要怎麼定義自己的函數 ε≡ヘ( ´∀`)ノ

語法

自定義函數需要設定函數名稱以及輸入的參數,如下所示:

def function_name (parameter1, parameter2, …) {
    expression1;
    expression2;
    …
    return expression; // optional
}

在自定義函數內部的變數名稱跟外部是獨立的,
目前也僅支援傳值呼叫(Call by value),
意思是調用自定義函數時會將傳入參數複製一份進去,範例如下:

def foo(x, y) {
    print(“foo1: x, y = “, x, y);
    x = 3;
    print(“foo2: x, y = “, x, y);
    return (x+y);
}

x = 1;
y = 2;
print(“foo result: “, foo(x, y));
print(“main: x, y = “, x, y);

這段程式會印出下面的結果:

foo1: x, y = , 1.000000 , 2.000000
// 傳入時: x = 1, y = 2;

foo2: x, y = , 3.000000 , 2.000000
// 我們在 foo 函式裡面把 x 偷偷改成 3

foo result: , 5.000000
// 確實回傳了 3 + 2 = 5 的結果

main: x, y = , 1.000000 , 2.000000
// 在外部的 x 仍然是 1,不會被內部修改的 x = 3; 影響

自定義函數的語法跟 Python 的函式定義很接近,
不過我們多了一對花括號{},要注意一下 (=´ω`=)

範例

這邊虎喵小編列出幾個自己常用到的自定義函數給大家參考:

// 以秒進行睡眠
def sleep(second) {
    msleep(1000 * second);
}
// 睡三秒
sleep(3);

// 等待直到某張圖出現在畫面上
def wait(path, count) {
    while (count > 0) {
        if (find(path)) {
            return 1;
        } else {
            sleep(1); // 可以在自定義函數裡面去呼叫其他的自定義函數唷
            count = count – 1;
        }
    }
}
// 等 OK.img 這張圖出現,最多等 3 秒
wait(“res/OK.img”, 3);

到這邊為止已經把Blackey Script的功能都介紹過一遍了,
還在等什麼,趕快手刀起來試試吧!ᕦ(ò_óˇ)ᕤ
如果有任何不懂的地方,歡迎留言給小編,

也歡迎到我們的粉絲專頁來互動~
(<ゝω・) Waiting for you ☆