while循环不会在另一个循环中工作

时间:2015-10-14 00:33:16

标签: lua roblox

我正在使用roblox lua编写脚本,当我尝试在第一个中放入一个while循环时,它会让第一个代码序列变得有人帮我解决这个问题吗?

问题在于,当人形生物到达tar2时,他会停在那里并且不会移动我希望他继续跑到积分但是如果有一个真实的人过来的话那么他会在他之后追赶他。 / p>

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

1 个答案:

答案 0 :(得分:1)

协程! Coroutines是炸弹袭击。它们允许您在一个脚本中同时执行多个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() -- run around
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) -- this lets you do two while loops at the same time.

function aggroCor() -- when a player is nearby
    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似乎工作太多了。