You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

修改说明

  1. 移除递归调用:删掉play1.Completed:Connect(rotating),避免动画完成后再次触发旋转函数,从根源上终止无限循环
  2. 优化状态标记:用isRotating替代模糊的c,明确标记动画是否在运行,防止多次触发导致动画叠加
  3. 延迟重置状态:仅在动画完成后才将isRotating设回false,确保同一时间只有一个旋转动画执行

内容的提问来源于stack exchange,提问作者Kropka950

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 22:15:39