Lua Roblox Studio跳过循环

Lua Roblox Studio跳过循环,lua,roblox,Lua,Roblox,我有一个脚本,可以逐渐将玩家传送到一个角色: 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.CFr

我有一个脚本,可以逐渐将玩家传送到一个角色:

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循环。知道为什么吗?

正如@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,则它永远不会达到该值/永远不会启动该循环,以下代码可能会帮助您:

对于y=0,math.floor(math.abs(part.y-player.y)/steps)为1 等待(0.3) 打印(“1”) 游戏。玩家:FindFirstChild(用户名)。Character.HumanoidRootPart.CFrame =游戏。玩家:FindFirstChild(用户名)。Character.HumanoidRootPart.CFrame +矢量3.新(0,步骤,0)
结束

因为
part.Y
part.Z
@EgorSkriptunoff谢谢!请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带有解释的答案通常更有帮助,质量更好,更容易吸引选票
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