Prática de loops - crie uma ponte temporária

*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.

Este projeto é outro exemplo de usar para loops de maneira prática.Para esta ponte, os jogadores tocarão em um botão para tornar uma ponte percorrível por um tempo limitado antes de desaparecer.Para criar um cronômetro e mostrar o tempo restante a um jogador, você usará para loops.

Configurar o projeto

Esta ponte pode ser incluída em qualquer projeto de jogo com desafios baseados em movimento, como um obby.

Criar peças

  1. Encontre um lugar para construir uma ponte, como um rio ou um grande espaço em um obby. Crie três partes ancoradas como abaixo.

    • Exibição de Temporizador
    • Ponte
    • Ponte de Botão
  2. Quando inativo, a ponte será semic transparente. Para fazer isso, selecione a Ponte e altere suas propriedades.

    • Transparência = 0.8
    • Pode Colidir = Falso

Crie a exibição do cronômetro

Ao atravessar a ponte, os jogadores precisarão ver quantos segundos restam antes que a ponte desapareça.Uma maneira de exibir imagens ou texto é adicionando um objeto chamado de GUI de Superfície a uma parte. GUIs de superfície também podem ser usadas para criar sinais no jogo, barras de saúde personalizadas e sistemas de inventário.Este tutorial passará por isso rapidamente, mas mais informações podem ser encontradas na seção Tutoriais.

  1. Selecione TimerDisplay e adicione um SurfaceGui . Em seguida, parented para o Surface Gui, adicione um TextLabel .

  2. Selecione a Interface gráfica do usuáriode Superfície. Nas Propriedades, faça as seguintes alterações:

    • Altere o Rosto para que você possa ver a etiqueta de texto na frente do relógio onde o jogador está olhando.
  3. Selecione o TextLabel. Nas Propriedades, faça as seguintes alterações:

    • Defina Tamanho {1, 0},{1, 0} .
    • Defina TextScaled para verdadeiro.
    • Defina Texto para ser vazio. O texto será atualizado usando o script.

Configure o script

Agora que o cronômetro está em local, crie um script para controlar a ponte e exibir o número de contagem regressiva para os jogadores.

  1. Na parte da Ponte, adicione um novo script chamado TimedBridge. Nesse script, crie as seguintes variáveis.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Quanto tempo a ponte vai permanecer sólida
    local timerDuration = 5

Codifique a interação de toque

Para usar a ponte, você precisará criar duas funções.Uma função tornará a ponte caminhável e exibirá o cronômetro.A outra função ouvirá se um jogador tocar no botão que ativa a ponte.

  1. Crie uma nova função chamada startTimer() com uma declaração de impressão dentro. Você usará a declaração de impressão para testar seu código.


    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. Codifique uma função chamada buttonPressed() para verificar se um humanoide toca no botão.A função deve aceitar um parâmetro de partTouched , e então ter uma declaração vazia se um humanoide for detectado naquela parte.


    local function startTimer()
    print("Countdown started")
    end
    local function buttonPressed(partTouched)
    local character = partTouched.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    end
    end
  3. Para iniciar o cronômetro, na declaração if, chame a função startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Ao final de buttonPressed(), conecte a função buttonPressed() ao evento do botão Touched.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Execute o projeto. Toque na peça e verifique na janela de Saída para ver a declaração de impressão.

Dicas de solução de problemas

Neste ponto, se a ponte não funcionar como pretendido, tente uma das seguintes abaixo. Problema : Mensagem de erro dizendo: "... is not a valid member of workspace" .

  • No script TimedBridge, verifique se todas as peças estão escritas exatamente como são vistas no Explorador. Problema : Não consigo ver as peças.

  • Certifique-se de que todas as três partes estejam Ancoradas.

  • Verifique a propriedade de Transparência para a ponte.

Crie o cronômetro

Sempre que os jogadores pisam na ponte, startTimer() fará com que a ponte seja percorrível e inicie o cronômetro.Uma vez que o tempo chegue a 0, a ponte se tornará insegura, fazendo com que qualquer pessoa que não seja rápida o suficiente queda.

Torne a ponte caminhável

Para começar, o script precisará tornar a ponte sólida, ou colidível e, em seguida, iniciar um cronômetro até que se torne inacessível.

  1. Para tornar a ponte passável, em startTimer(), altere a propriedade de transparência da ponte para 0 (opaca) e a propriedade CanCollide para verdadeira.


    local function startTimer()
    -- Torne a ponte visível e percorrível
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Para criar um cronômetro que conta regressivamente, crie um ciclo for com os seguintes valores.

    • Variável de controle : chamada count , definida como timerDuration .
    • Fim : 0
    • Incremento : -1

    local function startTimer()
    -- Torne a ponte visível e percorrível
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Para mostrar o cronômetro aos jogadores, altere o texto em timerText para mostrar o número de exibições digitando timerText.Text = count.Cada vez que o loop for passa por uma iteração, mostrará aos jogadores o próximo número no cronômetro.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Use uma função wait.task para fazer o ciclo for executar apenas uma vez a cada segundo.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Execute o jogo. Quando você tocar no botão, a ponte deve aparecer e o cronômetro iniciará, então concluirá.

Mantenha a ponte de reinicialização

Observe, porém, se você se mover ao redor do botão, o cronômetro continuará reiniciando.

Isso porque o loop for está sendo chamado cada vez que você toca no botão e inicia o loop for desde o início.Para manter o cronômetro de reinicialização constante, você precisará adicionar um booleano, um tipo de variável, que controlará se startTimer() é permitido ser chamado novamente. Booleans são escritos da mesma maneira que outras variáveis, mas em vez de usar números ou strings, eles só podem ser definidos como verdadeiro ou falso.Nesta situação, o script usará um booleano para verificar se o cronômetro está atualmente em execução antes de iniciá-lo.

  1. No topo do seu script, sob suas variáveis, crie uma variável chamada timerActive e defina-a para false já que ninguém pressionou o botão ainda.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Para garantir que o cronômetro só comece quando o timerActive booleano for falso, adicione uma segunda condição à declaração if em buttonPressed() .


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Para manter startTimer() de executar novamente antes que o tempo acabe, defina o booleano timerActive em verdadeiro.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Na função startTimer(), após o loop for, defina a ponte de volta às suas propriedades originais alterando a transparência da ponte para 0,8 e CanCollide para falso.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Para loop que conta para baixo a partir da duração do cronômetro
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Faça com que a ponte não seja percorrível
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. A última coisa para redefinir a ponte é mudar o timerText para uma string vazia como era originalmente.Então, defina o timerActive booleano para falso.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Teste e verifique para garantir que a ponte possa ser usada várias vezes.

Complete o script de ponte temporária


local bridge = script.Parent
-- Obtém o botão enquanto é digitado no Explorador
local button = workspace.ButtonBridge
-- Obtém a peça para o display
local timerPart = workspace.TimerDisplay
-- Obtém o Texto que exibirá o relógio
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo os jogadores precisam atravessar a ponte
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Para loop que conta para baixo a partir da duração do cronômetro
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Faça com que a ponte não seja percorrível
bridge.Transparency = 0.8
bridge.CanCollide = false
timerText.Text = ""
timerActive = false
end
local function buttonPressed(partTouched)
local character = partTouched.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
print("part touched")
if humanoid and timerActive == false then
print("starting timer")
startTimer()
end
end
button.Touched:Connect(buttonPressed)

Sumário

Ciclos podem ser combinados com diferentes meios de interação para criar momentos divertidos de jogo.Neste Tutorial, uma ponte temporária é criada usando um ciclo for que funciona como uma contagem regressiva.Durante a contagem regressiva, os jogadores são dados um tempo limitado para atravessar.