如何在Roblox中删除所有克隆的GUI

我正在创建一个舞蹈表演游戏,我想在每一轮开始前在列表中显示玩家的名称和他们的序列。我正在使用克隆来为每个玩家创建一个新的标签。我的问题是,克隆的列表在第一轮后没有被删除,而玩家的名字会重复。这是我的代码

contList.OnClientEvent:Connect(function(Contestants)  ---在本地脚本中的远程事件
for i=1,#Contestants do
        nameList  = script.Parent.List.plrsList.nameList:Clone()
        nameList.Parent = script.Parent.List.plrsList
        nameList.Name = Contestants[i].Name
        nameList.nList.Text = Contestants[i].Name     --玩家的名字
        seqNo = script.Parent.List.sequence.seqNo:Clone()
        seqNo.Parent = script.Parent.List.sequence
        seqNo.Name =i                                 --序列编号
        seqNo.sequence.Text = i
        List = script.Parent.List
    end
    List.Visible = true
    wait(10)
    List.Visible = false
    for i=1,#Contestants do
        nameList:Remove()
        seqNo:Remove()
    end
end)
点赞
用户2860267
用户2860267

你的问题在于当你清理列表时,nameListseqno 变量只指向你添加到列表中的最后一项,它并没有移除所有你添加的项。

有几种不同的方式可以去删除它们,但我建议的方法是:

  1. 创建一个空容器,比如一个 Frame。
  2. 当创建新的 TextLabel 时,将它作为这个容器的子元素。
  3. 当你准备清理时,只需删除框架,这会一次性删除所有子元素。

代码看起来像这样:

contList.OnClientEvent:Connect(function(Contestants)  ---本地脚本中的远程事件
    -- 找到一些 UI 元素
    local list = script.Parent.List
    local playersList = list.plrsList
    local playerNameList = playersList.nameList
    local sequence = list.sequence
    local sequenceNumber = sequence.seqNo

    -- 1. 创建一个空容器来容纳所有的玩家
    local container = Instance.new("Frame")
    container.Size = UDim2.new(1, 0, 1, 0)
    container.Position = UDim2.new(0, 0, 0, 0)
    container.BackgroundTransparency = 1.0
    local layout = Instance.new("UIListLayout", container)
    layout.SortOrder = Enum.SortOrder.Name

    -- 1a. 为玩家姓名创建一个容器
    local playerContainer = container:Clone()
    playerContainer.Parent = playersList

    -- 1b. 为玩家序号创建一个容器
    local sequenceContainer = container:Clone()
    sequenceContainer.Parent = sequence

    -- 2. 为每个玩家创建一个条目,并将它们放入他们的容器中
    for i = 1, #Contestants, 1 do
        local nameList  = playerNameList:Clone()
        nameList.Name = Contestants[i].Name
        nameList.nList.Text = Contestants[i].Name
        nameList.Parent = playerContainer

        local seqNo = sequenceNumber:Clone()
        seqNo.Name = tostring(i)
        seqNo.sequence.Text = tostring(i)
        seqNo.Parent = sequenceContainer
    end

    -- 稍微显示一下列表
    list.Visible = true
    wait(10)
    list.Visible = false

    -- 3. 通过删除容器来清理
    playerContainer:Destroy()
    sequenceContainer:Destroy()
end)
2021-01-11 10:11:18