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
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
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
Selecione TimerDisplay e adicione um SurfaceGui . Em seguida, anexado à Surface Gui, adicione um TextLabel .
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.
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.
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 ficar sólidalocal 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.
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")endCó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")endlocal function buttonPressed(partTouched)local character = partTouched.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenendendPara iniciar o timer, na declaração if, chame a função startTimer().
local function buttonPressed(otherPart)local character = otherPart.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenstartTimer()endendSob o fim de buttonPressed(), conecte a função buttonPressed() à evento Touched do botão.
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 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.
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ávelbridge.Transparency = 0bridge.CanCollide = trueendPara 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ávelbridge.Transparency = 0bridge.CanCollide = truefor count = timerDuration, 0, -1 doendendPara 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 dotimerText.Text = countendUse a função task.wait para fazer o for loop run apenas uma vez por segundo.
for count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)endExecute 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.
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 = 5local timerActive = falselocal function startTimer()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.Parentlocal humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid and timerActive == false thenstartTimer()endendPara 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 = truebridge.Transparency = 0bridge.CanCollide = trueNa 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 = truebridge.Transparency = 0bridge.CanCollide = true-- Para loop que conta a partir de timerDurationfor count = timerDuration, 0, -1 dotimerText.Text = counttask.wait(1)end-- Faça com que a ponte não seja caminhávelbridge.Transparency = 0.8bridge.CanCollide = falseendUma ú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.8bridge.CanCollide = falsetimerText.Text = ""timerActive = falseTeste 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.