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
我有一个逐渐将玩家传送到某个部分的脚本:
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