【问题标题】:liked to know how repeating while loop in game works想知道在游戏中重复while循环是如何工作的
【发布时间】:2020-11-17 10:53:19
【问题描述】:

此代码在游戏开始时在某个区域内的地图上生成 100 只鸡,但是玩家已经收集了所有 100 只鸡,没有剩余可收集所以我想知道如何重新生成另外 100 只鸡说一次剩下的数量已经下降到 10,所以玩家将有连续数量的鸡来收集,希望这是有道理的,在此先感谢。日本人

local newChicken = game.ServerStorage:FindFirstChild("ChickenOnePart")

local TopLeftCorner = Vector3.new(-187.64, 20.679, 106.2)
local BottomRightCorner = Vector3.new(201.12, 20.679, -241.45)
local numberOfChickens = 100
local counter = 0

local singleTonRandom = Random.new(tick())

local function GetRandom(Min,Max)
return singleTonRandom:NextNumber(Min,Max)
end


while counter < numberOfChickens  do
local chicken = newChicken:Clone()
chicken.Anchored = true
chicken.Parent = game.Workspace
chicken.Name = "Chicken"
chicken.Position = Vector3.new(
    GetRandom(TopLeftCorner.X,BottomRightCorner.X),
    4,
    GetRandom(TopLeftCorner.Z,BottomRightCorner.Z)
)
counter = counter + 1

end 

此代码在玩家每次触摸鸡时将计数器加 1。我能从这里得到当前的鸡数吗?

if hitPart.Name == "Chicken" then
    event:FireServer(hitPart)
    local currentcount = playerGUI.ChickenGui.ChickenCounter.Text
    playerGUI.ChickenGui.ChickenCounter.Text = currentcount + 1
    hitPart:Destroy()
    debounce = true
    wait(0.1)
    debounce  = false
end
end)

以及用于更新领导者的代码。

local event = Instance.new("RemoteEvent")
event.Name = "CurrencyAdd"
event.Parent = game.ReplicatedStorage

event.OnServerEvent:Connect(function(plr,part)
local currency = plr.leaderstats.Chickens
currency.Value = currency.Value + 1
end)


game.Players.PlayerAdded:Connect(function(plr)
local ls = Instance.new("Folder")
ls.Name = "leaderstats"
local m = Instance.new("IntValue",ls)
m.Name = "Chickens"
ls.Parent = plr

local cash = Instance.new("IntValue",ls)
cash.Name = "Cash"
end)

@Piglet 谢谢你,我有点明白你的意思是什么?

local newChicken = game.ServerStorage:FindFirstChild("ChickenOnePart")

local TopLeftCorner = Vector3.new(-187.64, 20.679, 106.2)
local BottomRightCorner = Vector3.new(201.12, 20.679, -241.45)
local numberOfChickens = 100
local counter = 0

local singleTonRandom = Random.new(tick())

local function GetRandom(Min,Max)
return singleTonRandom:NextNumber(Min,Max)
end

for counter = 1, numberOfChickens do
local chicken = newChicken:Clone()
chicken.Anchored = true
chicken.Parent = game.Workspace
chicken.Name = "Chicken"
chicken.Position = Vector3.new(
    GetRandom(TopLeftCorner.X,BottomRightCorner.X),
    4,
    GetRandom(TopLeftCorner.Z,BottomRightCorner.Z)
)
counter = counter + 1
end

function AddChicken(num)
for count = 10, num do
local chicken = newChicken:Clone()
chicken.Anchored = true
chicken.Parent = game.Workspace
chicken.Name = "Chicken"
chicken.Position = Vector3.new(
  GetRandom(TopLeftCorner.X,BottomRightCorner.X),
  4,
  GetRandom(TopLeftCorner.Z,BottomRightCorner.Z)
)
end        
end
AddChicken(90)

对不起,我只是在学习这一切

【问题讨论】:

  • 您是否有任何代码可以检测玩家何时触摸鸡?
  • 嗨,是的,我有你的意思的代码,我将它添加到操作中。希望这可以帮助。问候 jp
  • 使用 for 循环而不是带计数器的 while 循环
  • 嗨@Piglet 你能给我一个例子吗,因为我不是 100% 了解所使用的语法,我知道它类似于 (for i = 1,10,1 do) 但不确定在哪里把代码,soz

标签: loops while-loop lua roblox


【解决方案1】:

基本上,只需将 while 循环放在它自己的函数中,然后在鸡的数量低于某个阈值时调用该函数,就像调用 GetRandom 将鸡放置到位一样:

function GenerateChickens()
    while counter < numberOfChickens  do
        local chicken = newChicken:Clone()
        chicken.Anchored = true
        chicken.Parent = game.Workspace
        chicken.Name = "Chicken"
        chicken.Position = Vector3.new(
            GetRandom(TopLeftCorner.X,BottomRightCorner.X),
            4,
            GetRandom(TopLeftCorner.Z,BottomRightCorner.Z)
        )
        counter = counter + 1
    end
end

我不知道您如何获得当前的鸡数,但这应该是一个好的开始。

【讨论】:

    【解决方案2】:

    由于像这样的循环很常见,所以有一个更短的形式:

    local counter = 0
    while counter < numberOfChickens do
      -- ...
      counter = counter + 1
    end
    

    这可以使用数字 for 循环来编写

    for counter = 1, numberOfChickens do
      -- ...
    end
    

    当只剩下 10 只鸡时再添加 100 只鸡,正如你建议的那样,你会得到 110 只鸡。所以如果你想在地图上放 100 只鸡,你应该加 90。

    为此,您应该在移除鸡时检查鸡数。一旦您的条件为真,您应该调用一个添加一定数量鸡肉的函数。

    function AddChicken(num)
      for count = 1, num do
        local chicken = newChicken:Clone()
        chicken.Anchored = true
        chicken.Parent = game.Workspace
        chicken.Name = "Chicken"
        chicken.Position = Vector3.new(
          GetRandom(TopLeftCorner.X,BottomRightCorner.X),
          4,
          GetRandom(TopLeftCorner.Z,BottomRightCorner.Z)
        )
      end        
    end
    

    只要确保函数在 newChicken 的范围内

    【讨论】:

    • 嗨,@Piglet 我不完全确定你的意思对此感到抱歉,如果你能告诉我如何写它,我会非常感激,如果不是那么感谢你的帮助。日本人
    • 我认为你最好做一个初学者教程和阅读 Lua 参考手册。如果您不了解函数的概念或如何编写 for 循环,那么将代码移至函数中以便多次运行这样的复杂操作毫无意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    相关资源
    最近更新 更多