while循环不能在另一个while循环内部工作。

我正在编写 Roblox Lua 脚本,但当我尝试在第一个循环中加入 while 循环时,会影响第一个代码序列。有人可以帮我解决这个问题吗?

问题在于当人形角色达到 tar2 时,他会停在那里不动。我希望他能继续跑到这些点,但如果有真实的人路过,他也会追随那个人。

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")
local plr = game.Players:GetChildren()
local tar1 = game.Workspace.tar1
local tar2 = game.Workspace.tar2
local tar3 = game.Workspace.tar3
local tar4 = game.Workspace.tar4
local pos = {tar1, tar2, tar3, tar4}
local char = script.Parent
local Hum = char.Humanoid
torso = char.Torso
GoTo = 0

while true do
    wait(1)
    if GoTo == 0 then
          Hum:MoveTo(pos[1].Position)
    end

    if (torso.Position - pos[1].Position).magnitude < 5 then
            GoTo = 1
    end

    if GoTo == 1 then
            Hum:MoveTo(pos[2].Position)
    end

    if (torso.Position - pos[2].Position).magnitude < 5 then
        GoTo = 2
    end

    if GoTo == 2 then
        Hum:MoveTo(pos[3].Position)
        Goto = 3
    end

    if (torso.Position - pos[3].Position).magnitude < 5 then
        GoTo = 4
    end

    if GoTo == 5 then
        Hum:MoveTo(pos[4].Position)
    end

    while true do
        wait(0.1)
        plrs = game.Players:GetChildren()
        for i,plr in ipairs(plrs) do
            if plr.Character ~= nil then
            tor = plr.Character.Torso
                if (torso.Position-tor.Position).magnitude <= 5 then
                        GoTo = 0
                        Hum:MoveTo(tor.Position)
                end
            end
        end
    end
end
点赞
用户5472431
用户5472431

协同程序!协同程序功能十分强大。它们允许你在一个脚本中同时运行多个while循环。

local larm = script.Parent:FindFirstChild("Left Arm")
local rarm = script.Parent:FindFirstChild("Right Arm")
local plr = game.Players:GetChildren()
local tar1 = game.Workspace.tar1
local tar2 = game.Workspace.tar2
local tar3 = game.Workspace.tar3
local tar4 = game.Workspace.tar4
local pos = {tar1, tar2, tar3, tar4}
local char = script.Parent
local Hum = char.Humanoid
torso = char.Torso
GoTo = 1

function normalCor() -- 跑来跑去
while true do
    wait(1)
    for i=1, 4 do
        if GoTo == i then
        Hum:MoveTo(pos[i].Position)
        end
        if (torso.Position - pos[i].Position).magnitude < 5 then
            GoTo = GoTo + 1
            if GoTo == 5 then
                GoTo = 1
            end
            --[[
            The above _can_ be done in a single statement:
            "GoTo = (GoTo+1)%4+1"
            "a % 4" gets the remainder of a / 4 ]]
        end
    end
end
end
cr = coroutine.create(normalCor)
coroutine.resume(cr) -- 这个让你同时执行两个while循环。

function aggroCor() -- 有玩家附近
    while true do
        wait(0.1)
        plrs = game.Players:GetChildren()
        for i,plr in ipairs(plrs) do
            if plr.Character ~= nil then
            tor = plr.Character.Torso
                if (torso.Position-tor.Position).magnitude <= 5 then
                        GoTo = 0
                        Hum:MoveTo(tor.Position)
                end
            end
        end
    end
end
cr = coroutine.create(aggroCor)
coroutine.resume(cr)

Roblox 有语法 spawn(aggroCor),你也可以玩一下,如果coroutine.whatever听起来太麻烦。

2015-10-21 17:07:52