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
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
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.
Selecione TimerDisplay e adicione um SurfaceGui . Em seguida, parented para o Surface Gui, adicione um TextLabel .
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.
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.
Na parte da Ponte, 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-- Quanto tempo a ponte vai permanecer sólidalocal 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.
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")endCodifique 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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara iniciar o cronômetro, na declaração if, chame a função startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendAo final de buttonPressed(), conecte a função buttonPressed() ao evento do botão Touched.
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendbutton.Touched:Connect(buttonPressed)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.
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ívelbridge.Transparency = 0bridge.CanCollide = trueendPara 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ívelbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara 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 dotimerText.Text = countendUse uma função wait.task para fazer o ciclo for executar apenas uma vez a cada segundo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endExecute 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara manter startTimer() de executar novamente antes que o tempo acabe, defina o booleano timerActive em 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 falso.
local function startTimer()timerActive = truebridge.Transparency = 0bridge.CanCollide = true-- Para loop que conta para baixo a partir da duração do cronômetrofor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Faça com que a ponte não seja percorrívelbridge.Transparency = 0.8bridge.CanCollide = falseendA ú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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTeste 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.