通常,函数只能使用它们内部编码的信息。然而,有时你可能不知道这些信息会是什么,或者你希望能够使用相同的函数处理多个相似的信息。例如,如果你想用一个函数向所有人显示最快完成障碍赛课程的人的名字,而那个人的名字在比赛结束之前是无法知道的。
参数是你希望稍后提供给函数的信息的占位符。它们就像窗户,让你能够传递信息给函数。
使用参数和事件设置一个陷阱
这个脚本将创建一个陷阱部件,销毁触碰到该部件的任何物体,包括其他部件。你需要使用一个参数来进行设置。小心使陷阱固定在一个不会掉落并意外破坏其他东西的位置。
创建一个新部件
需要设置一个部件,该部件将销毁接触到它的任何物体。
- 创建一个新的部件,它不要接触到其他任何东西。如果它碰到其他东西,可能会过早触发。
- 在资源管理器中,将部件重命名为:TrapPart。
- 固定该部件。
设置脚本
利用你对变量和经验层次结构的了解来引用陷阱部件。
在陷阱部件中添加一个新的脚本。将脚本重命名为 TrapScript。
删除 Hello World,并添加一个描述性注释。
在注释下,创建一个新变量,以找到脚本的父对象。
-- 销毁接触父对象的任何物体local trap = script.Parent
创建一个带有参数的函数
陷阱将使用一个函数来销毁接触到该部件的任何物体。为了使其生效,函数需要知道是什么接触了该部件。这就意味着要使用参数。参数在函数名后面的 () 内部编写。它们看起来像这样:
local function functionName(parameterName)
end
传递给参数的实际信息称为参数值(argument)。你将创建一个名为 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 事件,并通过参数传递了触碰陷阱的内容。