Prática de Loops - Criando 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 por loop de uma maneira prática. Para esta ponte, os jogadores tocarão um botão para tornar a ponte caminhável por um tempo limitado antes de desaparecer. Para criar um timer e mostrar o tempo restante para um jogador, você usará por loop.

Configurando o Projeto

Este橋可以 ser incluído em qualquer projeto de jogo com desafios baseados em movimento, como um obby.

Criando Peças

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

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

    • Transparência = 0.8
    • pode colidir = Falso

Criando a Tela do Temporizador

Ao atravessar a ponte, os jogadores precisarão ver quantos segundos restam antes que a ponte desapareça. Uma maneira de exibir imagens ou textos é adicionando um objeto chamado uma GUI de Superfície à parte. GUI de Superfície também pode ser usado para criar sinais, barras de saúde personalizadas e sistemas de inventário. Este tutorial irá abordar isso rapidamente, mas mais

  1. Selecione TimerDisplay e adicione um SurfaceGui . Em seguida, anexado à Surface Gui, adicione um TextLabel .

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

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

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

Configurando o Script

Agora que o cronômetro está em local, crie um script para controlar a ponte e exibir o número de contagem 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 ficar sólida
    local timerDuration = 5

Código da Interação Tátil

Para usar o bridge, você precisará criar duas funções. Uma função fará com que o bridge seja caminhável e exibir o timer. A outra função ouvirá se um jogador tocar o botão que ativa o bridge.

  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. Código uma função chamada buttonPressed() para verificar se um humanóide toca o botão. A função deve aceitar um parâmetro de partTouched e, em seguida, ter uma declaração de vazio se um humanóide for detectado naquele 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 timer, 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. Sob o fim de buttonPressed(), conecte a função buttonPressed() à evento Touched do botão.


    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 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 deveria, 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 peças estão ancoradas.

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

Criando o Temporizador

Quando os jogadores pisarem na ponte, startTimer() a ponte ficará caminhável e o timer será iniciado. Quando o timer atingir 0, a ponte ficará impossível de caminhar, fazendo com que qualquer pessoa que não seja rápida o suficiente para queda.

Tornando a Ponte Caminhável

Para começar, o script precisará tornar a ponte sólida ou colidível e depois iniciar um timer até que se torne iniciante.

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


    local function startTimer()
    -- Tornar a ponte visível e caminhável
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Para criar um cronômetro que conta para baixo, crie um for loop com os seguintes valores.

    • Variável de Controle : chamado count , definido para timerDuration .
    • Fim : 0
    • Incremento : -1

    local function startTimer()
    -- Tornar a ponte visível e caminhável
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Para mostrar o timer para os jogadores, altere o texto em timerText para exibir a contagem ao digitar timerText.Text = count . Cada vez que o for loop passa por uma iteração, ele mostrará os jogadores o próximo número no timer.


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


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

Mantenha a ponte do reboot

No entanto, se você se mover no botão, o timer vai continuar reiniciando.

Isso ocorre porque o for loop está sendo chamado cada vez que você toca o botão e inicia o for loop desde o início. Para manter o timer de reiniciar constantemente, você precisará adicionar um valor aleatório, um tipo de variável, que controlará se o startTimer() pode ou não ser chamado novamente. Booleans são escritos da mesma maneira que outras variáveis, mas em vez de usar números ou cadeias, eles só podem ser definidos como verdadeiro ou falso. Nesta situação, o script usará um booleano para verificar se o timer está executando antes de iniciá-lo.

  1. Na parte superior do seu script, em suas variáveis, crie uma variável chamada timerActive e defina-a para false, pois ninguém ainda pressionou o botão.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Para garantir que o cronômetro só comece quando o botão timerActive é pressionado, 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 evitar que startTimer() seja executado novamente antes que o temporizador acabe, configure o botão de verdadeiro timerActive para ser ativado.


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


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Para loop que conta a partir de timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Faça com que a ponte não seja caminhável
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. Uma última coisa para redefinir a ponte é alterar o timerText para uma string vazia como o que estava originalmente. Então, configure 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 Tempo


local bridge = script.Parent
-- Obtém o botão como é escrito no Explorador
local button = workspace.ButtonBridge
-- Obtém a peça para a exibição
local timerPart = workspace.TimerDisplay
-- Obtém o Texto que exibirá o timer
local timerText = timerPart.SurfaceGui.TextLabel
-- Quanto tempo os jogadores têm para 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 a partir de timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Faça com que a ponte não seja caminhá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)

Visão Geral

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