【问题标题】:Roblox Studio skipping for loopsRoblox Studio 跳过循环
【发布时间】: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.Y 和part.Z < player.Z
  • @EgorSkriptunoff 谢谢!

标签: lua roblox


【解决方案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
      

      【讨论】:

      • 请不要只发布代码作为答案,还要解释您的代码的作用以及它如何解决问题的问题。带有解释的答案通常更有帮助、质量更好,并且更有可能吸引投票
      猜你喜欢
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多