Roblox Studio 跳过循环

Roblox Studio skipping for loops

我有一个逐渐将玩家传送到某个部分的脚本:

for y = 0, math.floor((part.Y-player.Y)/steps), 1 do
    wait(0.3)
    print "1"
    game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame + Vector3.new(0, steps, 0)
end
for x = 0, math.floor((part.X-player.X)/steps), 1 do
    wait(0.3)
    print "2"
    game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame + Vector3.new(steps, 0, 0)
end
for z = 0, math.floor((part.Z-player.Z)/steps), 1 do
    wait(0.3)
    print "3"
    game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame + Vector3.new(0, 0, steps)
end

每当我 运行 roblox studio 上的脚本时,它都会跳过 Y for 循环和 Z for 循环,并且只 运行s X for 循环。知道为什么吗?

正如@Egor Skriptunoff 所说,如果零件的 Y、X 或 Z 值小于玩家的 Y、X 或 Z 值,则循环不会 运行。

解决这个问题的一个简单方法是像这样围绕减法使用 math.abs() 方法,

for y = 0, math.floor(math.abs(part.Y-player.Y)/steps), 1 do
    wait(0.3)
    print "1"
    game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame + Vector3.new(0, steps, 0)
end

这确保结果始终为正,因为 math.abs 只是去掉了负号。

使用一个名为"math.abs"的命令,它实际上将每个值转换为其绝对值。 虽然如果你的 for I 循环以正 1 为增量,它永远不会达到 value/never 将开始该循环,这里是可能对你有帮助的代码:

对于 y = 0,math.floor(math.abs(part.Y-player.Y)/步),1 做 等待(0.3) 打印(“1”) game.Players:FindFirstChild(用户名).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(用户名).Character.HumanoidRootPart.CFrame + Vector3.new(0, 步数, 0) 结束

for y = 0, math.floor(math.abs(part.Y-player.Y)/steps), 1 do
    wait(0.3)
    print "1"
    game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame = game.Players:FindFirstChild(username).Character.HumanoidRootPart.CFrame + Vector3.new(0, steps, 0)
end