Arrays podem ser combinados com laços, como while e for, para repetir o mesmo código para cada valor indexado. Por exemplo, teletransportar cada jogador em um array para um novo lugar ou fazer um array de partes pegar fogo.
Para explorar a iteração através de arrays, crie um caminho de ponte que desaparece, onde as partes são colocadas em um array e depois feitas para desaparecer uma a uma.
Percorrer um array
Para o projeto, encontre ou crie um conjunto de três partes para fazer desaparecer. As partes devem estar todas ancoradas.
Crie três partes. Nomeie as partes na ordem em que devem desaparecer: Parte1, Parte2, Parte3.
No ServerScriptService, insira um novo script e crie um array para armazenar as partes.
local pathArray = {}Em uma única linha cada, digite o nome das partes na ordem em que devem desaparecer. Usar uma nova linha para cada valor torna mais fácil de ler.
local pathArray = {workspace.Parte1,workspace.Parte2,workspace.Parte3,}
Use um laço for com um array
Use um laço for para percorrer o array e controlar quão rápido as partes devem desaparecer na ordem em que as partes estão indexadas dentro do array.
Para controlar com que frequência uma parte desaparece em segundos, crie uma variável chamada VANISH_RATE. Para testes, é melhor mantê-la em um número pequeno.
local VANISH_RATE = 1.5local pathArray = {workspace.Parte1,workspace.Parte2,workspace.Parte3}Crie um laço for com o seguinte: Início: partIndex = 1, o índice do primeiro valor no array. Fim: #pathArray, o tamanho desse array.
for partIndex = 1, #pathArray doendPara que haja um atraso antes de uma parte desaparecer, no laço, adicione um task.wait() usando VANISH_RATE.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)endPara fazer uma parte desaparecer, crie uma nova variável chamada whichPart e defina-a igual a pathArray[partIndex]. Então, para fazer essa parte desaparecer, defina a propriedade CanCollide como false e Transparency como 1.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endVerifique se as partes do caminho desaparecem ao longo do tempo.
Dicas de solução de problemas
Se a ponte não desaparecer, verifique os possíveis problemas abaixo:
Problema: As partes desaparecem muito rápido ou já estão todas desaparecidas no início.
- Dependendo de quão rápido seu personagem carrega no jogo, as primeiras partes podem já estar invisíveis. Para resolver isso, adicione uma pequena espera, como task.wait(2), no início do script.
Codifique o segundo laço
Neste momento, as partes desaparecem para sempre. Para fazê-las reaparecer, crie um segundo laço for que percorrerá cada parte e instantaneamente tornará cada peça caminhável.
Após o primeiro laço, adicione um task.wait() para criar um pequeno atraso antes que o caminho reapareça.
for partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1endtask.wait(1)Por conta própria, tente codificar um segundo laço for que torne o caminho utilizável novamente, mudando a propriedade CanCollide de cada parte para true e Transparency para 0. Quando terminar, verifique seu trabalho com o código abaixo.
-- Redefine o caminho tornando todas as partes caminháveis novamentefor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endTeste o projeto para confirmar que, uma vez que todas as partes desaparecem, elas voltam.
Repita com um laço while
As partes desaparecem e reaparecem, mas apenas uma vez. Para fazer o código continuar repetindo, aninhe todo o código dentro de um laço while.
Na parte inferior do script, crie um novo laço while true do. Então, mova ambos os laços for para dentro do laço while.
while true do-- Faça uma parte desaparecer do array em ordemfor partIndex = 1, #pathArray dotask.wait(VANISH_RATE)local whichPart = pathArray[partIndex]whichPart.CanCollide = falsewhichPart.Transparency = 1end-- Aguarde um segundo antes de fazer o caminho reaparecertask.wait(1)-- Redefina o caminho tornando todas as partes caminháveis novamentefor partIndex = 1, #pathArray dolocal whichPart = pathArray[partIndex]whichPart.CanCollide = truewhichPart.Transparency = 0endendVerifique se, uma vez que todas as partes desaparecem, elas reaparecem.
Uma versão finalizada do projeto pode ser baixada.
local VANISH_RATE = 1.0
local pathArray = {
workspace.Parte1,
workspace.Parte2,
workspace.Parte3,
}
while true do
-- Faça uma parte desaparecer do array em ordem
for partIndex = 1, #pathArray do
task.wait(VANISH_RATE)
local whichPart = pathArray[partIndex]
whichPart.CanCollide = false
whichPart.Transparency = 1
end
-- Aguarde um segundo antes de fazer o caminho reaparecer
task.wait(1.0)
-- Redefina o caminho tornando todas as partes caminháveis novamente
for partIndex = 1, #pathArray do
local whichPart = pathArray[partIndex]
whichPart.CanCollide = true
whichPart.Transparency = 0
end
endArrays e ipairs()
ipairs() é usado com arrays. O "i" em ipairs() significa "índice". ipairs() pode ser usado para repetir rapidamente uma operação em muitos objetos, como, por exemplo, uma pasta cheia de partes.
Isso será demonstrado adicionando rapidamente partículas a uma pasta inteira de partes.
No Workspace, crie uma pasta chamada PartsFolder. Adicione quantas partes quiser.
No ServerScriptService, crie um novo script e faça referência à pasta.
Use GetChildren() para obter automaticamente um array listando todos os objetos na pasta.
local partsFolder = workspace.PartsFolder-- Obtém um array listando as partes na PartsFolderlocal partsArray = partsFolder:GetChildren()Use in ipairs(ArrayToUse) com o laço for para percorrer partsArray e adicionar partículas.
Script completo-- Obtém um array listando as partes na PartsFolderlocal partsArray = partsFolder:GetChildren()-- Adiciona partículas a cada parte no arrayfor index, part in ipairs(partsArray) dolocal particles = Instance.new("ParticleEmitter")particles.Parent = partend
Teste e veja as partículas flutuando de cada parte na pasta.
Resumo
Laços podem ser combinados com arrays para trabalhar rapidamente com qualquer número de valores. Se você quiser ter controle exato sobre o que acontece com algumas partes e em que ordem, um array deve ser codificado com valores específicos.
Para trabalhar com muitas partes onde a ordem não importa, GetChildren() pode criar um array dos filhos de um objeto. Utilizando ipairs(), a lista pode ser rapidamente iterada sem saber o tamanho do array.