Este projeto é outro exemplo de usar loops de maneira prática. Para essa ponte, os jogadores tocarão em um botão para deixar a ponte passável por um tempo limitado antes que ela desapareça. Para criar um timer e mostrar o tempo restante para um jogador, você usará loops.
Configurando o projeto
Esta ponte pode ser incluída em qualquer projeto de jogo com desafios baseados em movimento, como um obby.
Criando Peças
Encontre um lugar para construir uma ponte, como um rio ou um grande espaço em um obby. Crie três ancoradas partes como abaixo.
- Exibição do Temporizador
- Ponte
- Ponte de Botões
Quando inativo, a ponte será semi-transparente. Para fazer isso, selecione a Ponte e altere suas propriedades.
- Transparência = 0.8
- CanCollide = Falso
Criando o Display de Temporizador
Ao atravessar a ponte, os jogadores precisarão ver quantos segundos faltam antes que a ponte desapareça. Uma maneira de exibir imagens ou texto é adicionando um objeto chamado Surface GUI a uma peça. Os GUI de superfície também podem ser usados 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.
Selecione TimerDisplay e adicione um SurfaceGui . Então, relacionado ao Surface Gui, adicione um TextLabel .
Selecione a Interface gráfica do usuárioda Superfície. Nas Propriedades, faça as seguintes alterações:
- Altere o Face para que você possa ver o rótulo de texto na frente do temporizador onde o jogador está olhando.
Selecione o Label de Texto. Nas Propriedades, faça as seguintes alterações:
- Defina Tamanho para {1, 0},{1, 0} .
- Defina TextScaled para true.
- Defina Texto para em branco. O texto será atualizado usando o script.
Configurando o Script
Agora que o temporizador está no local, crie um script para controlar a ponte e mostrar o número da contagem regressiva aos jogadores.
Na parte Bridge, adicione um novo script chamado TimedBridge. Nesse script, crie as seguintes variáveis.
local bridge = script.Parentlocal button = workspace.ButtonBridgelocal timerText = workspace.TimerDisplay.SurfaceGui.TextLabel-- Por quanto tempo a ponte permanecerá sólidalocal timerDuration = 5
Codificando a Interação de Toque
Para usar a ponte, você precisará criar duas funções. Uma função tornará a ponte andável e exibirá o temporizador. A outra função ouvirá se um jogador tocar no botão que ativa a ponte.
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 = 5local function startTimer()print("Countdown started")endCrie 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, em seguida, ter uma instrução if vazia se um humanoide for detectado nessa parte.
local function startTimer()print("Countdown started")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara iniciar o temporizador, na instrução if, chame a função startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendNo final de buttonPressed(), conecte a função buttonPressed() ao evento Touched do botão.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)Corra 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 conforme o planejado, tente uma das seguintes opções 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 as três partes estejam ancoradas.
Verifique a propriedade Transparência para a ponte.
Criando o Temporizador
Sempre que os jogadores pisarem na ponte, startTimer() tornará a ponte andável e iniciará o cronômetro. Quando o cronômetro atingir 0, a ponte se tornará intransponível, fazendo com que qualquer um que não for rápido o suficiente queda.
Tornando a Ponte Caminhável
Para começar, o script precisará tornar a ponte sólida ou colidível e, em seguida, iniciar um temporizador até que ela se torne intransponível.
Para tornar a ponte andável, em startTimer(), altere a propriedade Transparência da ponte para 0 (opaque) e a propriedade CanCollide para true.
local function startTimer()-- Tornar a ponte visível e caminhávelbridge.Transparency = 0bridge.CanCollide = trueendPara criar um temporizador que conta para baixo, crie um loop com os seguintes valores.
- Variável de controle : nomeada count , definida como timerDuration .
- Fim : 0
- Incremento : -1
local function startTimer()-- Tornar a ponte visível e caminhávelbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara mostrar o temporizador aos jogadores, altere o texto para timerText para exibir a contagem digitando timerText.Text = count. Cada vez que o loop for passar por uma iteração, ele mostrará aos jogadores o próximo número no temporizador.
for count = timerDuration, 0, -1 dotimerText.Text = countendUse uma função task.wait para fazer com que o loop for corra apenas uma vez por segundo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endCorra o jogo. Quando você tocar no botão, a ponte deve aparecer e o cronômetro iniciar, depois será concluído.
Impedindo a Ponte de Reiniciar
Observe, no entanto, se você se mover no botão, o cronômetro continuará reiniciando.
Isso ocorre porque o loop for está sendo chamado toda vez que você toca no botão e inicia o loop for desde o início. Para evitar que o temporizador reinicie constantemente, você precisará adicionar um booleano, um tipo de variável, que controlará se startTimer() pode ser chamado novamente. Booleanos são escritos da mesma maneira que outras variáveis, mas em vez de usar números ou cadeias de caracteres, eles só podem ser configurados como verdadeiro ou falso. Nesta situação, o script usará um booleano para verificar se o temporizador está rodando no momento antes de iniciá-lo.
Na parte superior do seu script, sob suas variáveis, crie uma variável chamada timerActive e configure-a como false já que ninguém pressionou o botão ainda.
local timerDuration = 5local timerActive = falselocal function startTimer()Para ter certeza de que o temporizador só começará quando o timerActive booleano for falso, adicione uma segunda condição à instrução if em buttonPressed().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara evitar que startTimer() corra novamente antes que o timer acabe, defina o booleano timerActive como verdadeiro.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = trueNa 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 false.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Para loop que conta para baixo a partir do timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Tornar a ponte intransitávelbridge.Transparency = 0.8bridge.CanCollide = falseendUma última coisa para redefinir a ponte é mudar o timerText para uma string vazia como era originalmente. Então, defina o timerActive booleano como falso.
bridge.Transparency = 0.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTeste e verifique se a ponte pode ser usada várias vezes.
Completar roteiro de ponte cronometrada
local bridge = script.Parent
-- Obtém o botão conforme digitado no Explorador
local button = workspace.ButtonBridge
-- Obtém a peça para exibição
local timerPart = workspace.TimerDisplay
-- Obtém o Texto que exibirá o temporizador
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 para baixo a partir do timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Tornar a ponte intransitá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)
Resumo
Loops podem ser combinados com diferentes meios de interação para criar momentos divertidos de jogo. Neste Tutorial, uma ponte cronometrada é criada usando um loop que funciona como uma contagem regressiva. Durante a contagem regressiva, os jogadores recebem um tempo limitado para atravessar.