通常,函數只能使用它們內部編碼的信息。然而,有時您可能無法預測該信息會是什麼,或者您希望能夠使用多個相似的信息重用相同的函數。例如,如果您想使用一個函數來顯示在障礙賽中最快完成的人名,並以巨大的字體展示給所有人。直到比賽結束,您才會知道未來的獲勝者的名字。
參數是您希望稍後提供給函數的信息的佔位符。它們就像窗戶,可以讓您傳遞信息給函數。
使用參數和事件來設置一個陷阱
此腳本將創建一個陷阱部件,摧毀任何觸碰到該部件的物體,包括其他部件。您需要使用參數來設置它。小心將陷阱固定在不會掉落並無意中摧毀物品的位置。
創建一個新部件
需要設置一個部件,摧毀觸碰到它的任何物體。
- 創建一個不接觸任何物體的新部件。如果它與某物接觸,可能會太早觸發。
- 在 Explorer 中,將部件重命名為:TrapPart。
- 固定該部件。
設置腳本
使用您對變量和經驗層次結構的了解,引用陷阱部件。
在陷阱部件中添加一個新腳本。將腳本重命名為 TrapScript。
刪除 Hello World,並添加描述性注釋。
在注釋下方,創建一個新變量,用於查找腳本的父部件。
-- 摧毀任何觸碰父部件的物體local trap = script.Parent
創建一個帶參數的函數
陷阱將使用一個函數來摧毀觸碰到該部件的任何物體。要使其工作,函數需要知道是什麼觸碰到了部件。這意味著要使用參數。參數在函數名稱後面的 () 中輸入。它們看起來像這樣:
local function functionName(parameterName)
end
傳遞給參數的實際信息稱為參數。您將創建一個名為 onTouch() 的新函數,帶有一個名為 objectTouched 的參數,將跟踪觸碰到陷阱的物體,然後摧毀觸碰的部件。
創建一個本地函數。它可以命名為任何名稱,但本課程將使用 onTouch
local trap = script.Parentlocal function onTouch()end在 () 內輸入參數的名稱。本課程將使用 objectTouched。
local trap = script.Parentlocal function onTouch(objectTouched)end在 local function onTouch() 和 end 之間,創建一個打印語句。您將用這個來檢查接下來是否有東西觸碰到該部件。
local trap = script.Parentlocal function onTouch(objectTouched)print("某物觸碰了陷阱")end
使用事件來調用函數
我們希望當有東西觸碰到該部件時運行函數。為了實現這一點,將函數連接到 Touched 事件。事件是發生在經驗中的事情。比如玩家觸碰到一個部件或者失去生命。當一個函數與一個事件連接時,該函數會在事件發生時運行。
Touched 事件在一個部件觸碰到另一個部件時觸發,可以用來創建按鈕、陷阱和其他玩家互動的物體。
在函數的 end 下面,輸入 trap.Touched:Connect(onTouch)
local trap = script.Parentlocal function onTouch(objectTouched)print("某物觸碰了陷阱")end-- 將函數連接到 Touched 事件trap.Touched:Connect(onTouch)點擊測試,然後觸碰該部件。檢查您的測試打印語句:某物觸碰了陷阱。如果您在輸出窗口中看不到該字串,請檢查以下內容:
- 確保字串 "某物觸碰了部件!" 在 local function onTouch() 和 end 之間。
- 檢查 Touched 是否使用了大寫字母。
現在函數已正確設置,使用它來摧毀觸碰到該部件的任何物體。在函數內部,在字串之後,輸入 objectTouched:Destroy() 完成的代碼應為:
local trap = script.Parentlocal function onTouch(objectTouched)print("某物觸碰了陷阱")-- 摧毀觸碰的物體objectTouched:Destroy()endtrap.Touched:Connect(onTouch)再次測試,並查看當部件被觸碰時會發生什麼。您的角色應該會缺少腳或手。如果該部件觸碰到角色的頭部或頸部,角色甚至可能會被完全摧毀。
總結
參數用來傳遞那些通常超出範圍(函數無法看見的範圍)的信息進入函數。與此同時,事件是當某些重要事情發生時,在經驗中觸發的特殊信號。不同的物體有不同的事件。函數可以連接到事件,以便在每次事件觸發時調用。這個小腳本將函數連接到陷阱的 Touched 事件,並通過參數傳遞了觸碰到陷阱的物體。