事件系统
迷你世界 Studio
事件系统: 除了属性和函数的事件外,玩家还可以自定义事件,根据条件发出一些信号。
等待
wait()会使脚本暂停,直到指定事件的发生。除了能够传递发生的事件,还可以返回相关联的信息。
实例:玩家触碰到复活点模型时,等待被触碰后触发输出
连接
较为常用的一种方式,大部分节点都具有事件,可以使用 Connect()
进行连接,
实例:创建一个数值节点,当其变化时打印日志
local level = SandboxNode.New("Int",WorkSpace)
level.Name = "等级"
level.Value = 5
local function changed(value)
print("当前等级为"..value)
end
level.ValueChanged:Connect(changed)
level.Value = 6
level.Value = 3
level.Value = 2
如何取消连接
经过一定的时间或者满足一定的条件,可能需要取消连接,我们可以使用Disconnect()
断开连接。需要获得Connect()
的返回值。
值得注意的一点是,如果节点被消耗这些连接会自动断开不需要手动断开。
local level = SandboxNode.New("Int",WorkSpace)
level.Name = "等级"
level.Value = 5
local connection
local function changed(value)
if value<4 then
connection:Disconnect()
end
print("当前等级为"..value)
end
connection = level.ValueChanged:Connect(changed)
level.Value = 6
level.Value = 5
level.Value = 2
如何使用嵌套连接
在实际开发中,开发者面临的业务逻辑可能需要多层的嵌套,开发者可以使用第一个事件的局部函数进行绑定。
local level1 = SandboxNode.New("Int",WorkSpace)
local level2 = SandboxNode.New("Int",WorkSpace)
level1.Name = "等级1"
level2.Name = "等级2"
level1.Value = 5
level2.Value = 4
local function changed(value)
if value<5 then
level2.ValueChanged:Connect(function(value)
print("等级2发生了改变")
end)
end
print("等级1发生了改变")
end
level1.ValueChanged:Connect(changed)
level1.Value = 6
level2.Value = 10
level1.Value = 4
level2.Value = 15
level1.Value = 2
level2.Value = 18
自定义事件
在实际开发中,开发者会遇到需要自定义事件的情况。例如当某位玩家获得积分第一名后,需要一个脚本播放指定特效,一个脚本对全部玩家进行通知。这种情况就可以通过 CustomNotify
进行触发。与 RemoteEvent
不同,CustomNotify
不能进行跨界通知。
local CustomNotify = SandboxNode.New("CustomNotify")
--监听事件
CustomNotify.Notify:Connect(function(v1, v2)
print("TestNotify->"..v1.." "..v2)
--TestNotify->100 hello
end)
--发送自定义事件
CustomNotify:Fire(100,"hello")