Roblox Studio 跳过循环

Posted

技术标签:

【中文标题】Roblox Studio 跳过循环【英文标题】:Roblox Studio skipping for loops 【发布时间】:2019-03-05 11:34:53 【问题描述】:

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

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 循环,只运行 X for 循环。知道为什么吗?

【问题讨论】:

因为part.Y < player.Ypart.Z < player.Z @EgorSkriptunoff 谢谢! 【参考方案1】:

正如@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 只是去掉了负号。

【讨论】:

【参考方案2】:

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

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

【讨论】:

【参考方案3】:
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

【讨论】:

请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票

以上是关于Roblox Studio 跳过循环的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Roblox 和 Roblox Studio 在运行某些没有错误代码的脚本时都会崩溃?

如何在 Roblox Studio 中移动网格

Roblox Studio 未加载

Roblox Studio 价值问题

Roblox Studio 打印错误值

如何在 Roblox Studio 中解锁鼠标