Roblox Studio Lua脚本可显示Frame但无法隐藏的问题
问题原因
你的代码两个if判断是顺序执行的,没有做互斥,逻辑流程是:
- 点击触发后,先判断Frame是否为显示状态:如果是,就把它设为隐藏
- 上面的赋值执行完后,代码会立刻跑第二个
if判断,这时候Frame已经被改成隐藏状态了,判断成立,马上又把Frame设回显示
相当于每次点击你都先执行隐藏、再立刻执行显示,最终状态永远是显示,自然看不到隐藏效果,这个问题和Roblox平台本身无关,是基础逻辑顺序的问题。
修正代码
用if-else做互斥分支,保证每次点击只会执行显/隐其中一段逻辑,不会连续跑两段赋值:
script.Parent.MouseButton1Click:Connect(function() local frame = script.Parent.Parent.Frame if frame.Visible then frame.Visible = false else frame.Visible = true end end)
如果要写得更简洁,显隐逻辑可以直接用布尔值取反,不用写分支判断,效果完全一致:
script.Parent.MouseButton1Click:Connect(function() local frame = script.Parent.Parent.Frame frame.Visible = not frame.Visible end)
补充说明
你之前考虑到同事件并发可能导致逻辑失效、把两段逻辑放到同一个回调里的思路是没问题的,但忽略了Lua代码是从上到下顺序执行的:前一行代码修改的属性值,后一行代码立刻就能读到最新值,两个独立的if不会自动二选一,才会出现两次赋值抵消的情况。
另外把频繁用到的UI对象存到局部变量里(比如示例里的frame变量),不用每次都写长串的script.Parent.Parent.Frame路径,既能减少打错路径的概率,也能小幅提升代码运行效率。
内容的提问来源于stack exchange,提问作者Kob3eY
相关产品推荐
相关产品推荐

