Roblox脚本无限循环求助:如何终止旋转部件的无限动画?
解决Roblox脚本无限循环问题
问题原因
你的脚本出现无限循环的核心原因有两点:
rotating函数中通过play1.Completed:Connect(rotating)在补间动画完成后再次调用自身,形成递归循环- 变量
c的逻辑无效:在连接完成事件后立刻将c设回0,无法阻止函数重复执行,导致循环无法终止
修复后的代码
local plight = script.Parent.Bulb.PointLight local slight = script.Parent.Bulb.SpotLight local rotatingPart = script.Parent.Bulb local reader = script.Parent.Parent["card-reader1a"].reader1a.ProximityPrompt local isRotating = false -- 标记当前是否正在执行旋转动画 local tweenService = game:GetService("TweenService") local tInfo = TweenInfo.new(0.5, Enum.EasingStyle.Linear, Enum.EasingDirection.InOut, 0, false) local function rotating() -- 只有不在旋转时才执行动画 if not isRotating then isRotating = true -- 计算目标旋转角度:基于当前部件CFrame旋转120度 local targetCFrame = rotatingPart.CFrame * CFrame.Angles(0, math.rad(120), 0) local play1 = tweenService:Create(rotatingPart, tInfo, {CFrame = targetCFrame}) play1:Play() -- 动画完成后重置标记,允许下次触发 play1.Completed:Connect(function() isRotating = false end) end end reader.Triggered:Connect(rotating)
修改说明
- 移除递归调用:删掉
play1.Completed:Connect(rotating),避免动画完成后再次触发旋转函数,从根源上终止无限循环 - 优化状态标记:用
isRotating替代模糊的c,明确标记动画是否在运行,防止多次触发导致动画叠加 - 延迟重置状态:仅在动画完成后才将
isRotating设回false,确保同一时间只有一个旋转动画执行
内容的提问来源于stack exchange,提问作者Kropka950
相关产品推荐
相关产品推荐

