2015-10-14 132 views
0

我在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 
+0

内循环什么时候退出? –

+0

我想它永远不会。 – LuaLover

+0

我不明白你的代码中的逻辑,所以我不能评论超越,但也许你应该再次查看你的代码,并试图找出你的逻辑应该是什么。 –

回答

1

程序! Coroutines是bombdiggety。它们让你在一个脚本中同时执行多个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似乎有太多的工作。