Pratique de boucles - Créer un pont à durée

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Ce projet est un autre exemple d'utiliser des boucles d'une manière pratique. Pour ce pont, les joueurs toucheront un bouton pour rendre un pont marchable pour un temps limité avant qu'il ne disparaisse. Pour créer un calendrier et montrer le temps restant à un joueur, vous utiliserez pour les boucles.

Configurer le projet

Ce pont peut être inclus dans n'importe quel projet de jeu avec des défis basés sur des mouvements, comme un obby.

Créer des parties

  1. Trouvez un endroit pour construire un pont, comme une rivière ou un grand fossé dans un obby. Créez trois parties ancrées comme ci-dessous.

    • Afficher le Timer
    • Pont
    • Pont de bouton
  2. Lorsqu'il n'est pas inactif, le pont sera semi- transparent. Pour ce faire, sélectionnez le Bridge et changez ses propriétés.

    • Transparence = 0.8
    • CanCollide = Faux

Créer l'afficheur de minuteur

Lors de la traversée du pont, les joueurs devront voir combien de secondes il reste avant que le pont disparaisse. Une façon d'afficher des images ou du texte est d'ajouter un objet appelé une interface de surface à une partie. les interfaces de surface peuvent également être utilisées pour créer des panneaux dans le jeu, des barres de santé personnalisées et des systèmes d'inventaire. Ce tutoriel rapide, mais plus d'informations peu

  1. Sélectionnez TimerDisplay et ajoutez un SurfaceGui . Ensuite, parenté à la Surface Gui, ajoutez un TextLabel .

  2. Sélectionnez la interface utilisateur graphiquede surface. Dans les propriétés, faites les changements suivants :

    • Changez le visage afin de pouvoir voir l'étiquette de texte sur le devant du temps où le joueur regarde.
  3. Sélectionnez le TextLabel. Dans les propriétés, faites les changements suivants :

    • Définir la taille Size à {1, 0},{1, 0} .
    • Définir TextScaled sur vrai.
    • Set Text to be blank. Text will be updated using the script.

Configurer le script

Maintenant que le minuteur est en emplacement, créez un script pour contrôler le pont et afficher le nombre à compter pour les joueurs.

  1. Dans la partie Bridge, ajoutez un nouveau script nommé TimedBridge. Dans ce script, créez les variables suivantes.


    local bridge = script.Parent
    local button = workspace.ButtonBridge
    local timerText = workspace.TimerDisplay.SurfaceGui.TextLabel
    -- Combien de temps le pont restera solide
    local timerDuration = 5

Programmer l'interaction avec le toucher

Pour utiliser le pont, vous devrez créer deux fonctions. Une fonction fera en sorte que le pont soit marchable et affiche le minuteur. L'autre fonction écoutera si un joueur touche le bouton qui active le pont.

  1. Créez une nouvelle fonction nommée startTimer() avec une déclaration d'impression à l'intérieur. Vous utiliserez la déclaration d'impression pour tester votre code.


    local timerDuration = 5
    local function startTimer()
    print("Countdown started")
    end
  2. Codez une fonction nommée buttonPressed() pour vérifier si un humanoïde touche le bouton. La fonction doit accepter un paramètre de partTouched et ensuite avoir une déclaration vide si un humanoïde est détecté dans cette partie.


    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. Pour démarrer le minuteur, dans la if déclaration, appelez la fonction startTimer().


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
  4. Sous la fin de buttonPressed(), connectez la fonction buttonPressed() à l'événement Touched du bouton.


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    startTimer()
    end
    end
    button.Touched:Connect(buttonPressed)
  5. Exécutez le projet. Touchez la partie et vérifiez dans la fenêtre d'Output pour voir la déclaration d'impression.

Conseils de débogage

À ce stade, si le pont ne fonctionne pas comme prévu, essayez l'un des éléments suivants. Problème : Message d'erreur disant : "... is not a valid member of workspace" .

  • Dans le script TimedBridge, vérifiez que toutes les parties sont correctement orthographiées comme elles sont vues dans l'Explorer. Problème : Je ne peux pas voir les parties.

  • Assurez-vous que les trois parties sont Ancrées.

  • Vérifiez la propriété Transparence pour le pont.

Créer le Timer

Lorsque les joueurs marchent sur le pont, startTimer() fera le pont marchable et commencera le tueur. Une fois que le tueur atteindra 0, le pont deviendra non marchable, ce qui fera tomber n'importe qui qui n'est pas assez rapide pour chute.

Rendre le pont marchable

Pour commencer, le script devra rendre le pont solide, ou collidable, puis commencer un minuteur jusqu'à ce qu'il devienne impénétrable.

  1. Pour rendre le pont marchable, en startTimer(), modifiez la propriété de transparence du pont à 0 (opaque) et la propriété CanCollide à vrai.


    local function startTimer()
    -- Rendre le pont visible et marchable
    bridge.Transparency = 0
    bridge.CanCollide = true
    end
  2. Pour créer un minuteur qui compte à rebours, créez un for loop avec les valeurs suivantes.

    • Variable de contrôle : nommé count , défini sur timerDuration.
    • Fin : 0
    • Incrément : -1

    local function startTimer()
    -- Rendre le pont visible et marchable
    bridge.Transparency = 0
    bridge.CanCollide = true
    for count = timerDuration, 0, -1 do
    end
    end
  3. Pour montrer le minuteur aux joueurs, modifiez le texte dans timerText pour afficher le nombre de fois qu'un for loop est passé à travers une itération, il montrera aux joueurs le prochain nombre dans le minuteur. Chaque fois que le for loop passe à travers une itération, il montrera aux joueurs le prochain nombre dans le minuteur.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    end
  4. Utilisez la fonction task.wait pour exécuter le for loop only once a second.


    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
  5. Exécutez le jeu. Lorsque vous touchez le bouton, le pont apparaîtra et le minuteur commencera, puis terminez.

Garder le pont du redémarrage

Remarquez cependant, si vous vous déplacez sur le bouton, le télémètre s'allume et s'éteint.

Ceci est parce que le for loop est appelé chaque fois que vous touchez le bouton et que vous commencez le for loop depuis le début. Pour garder le timer de redémarrage constant, vous devrez ajouter un boutéan, un type de variable, qui contrôlera si oui ou non startTimer() peut être appelé à nouveau. Les booleans sont écrits de la même manière que d'autres variables, mais au lieu d'utiliser des chiffres ou des chaînes, ils ne peuvent être définis que comme vrai ou faux. Dans cette situation, le script utilise un boolean pour vérifier si le minuteur est actuellement en cours d'exécution avant de le démarrer.

  1. Au sommet de votre script, sous vos variables, créez une variable nommée timerActive et définissez-la sur false puisque personne n'a encore appuyé sur le bouton.


    local timerDuration = 5
    local timerActive = false
    local function startTimer()
  2. Pour vous assurer que le minuteur ne s'exécute que lorsque le timerActive bouton est faux, ajoutez une deuxième condition à la if statement dans buttonPressed() .


    local function buttonPressed(otherPart)
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid and timerActive == false then
    startTimer()
    end
    end
  3. Pour éviter que startTimer() ne s'exécute à nouveau avant la fin du minuteur, définissez le boutéen timerActive à vrai.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
  4. Dans la fonction startTimer(), après le for loop, définissez le pont à ses propriétés d'origine en changeant la transparence du pont de 0,8 à 0,8 et en désactivant CanCollide à false.


    local function startTimer()
    timerActive = true
    bridge.Transparency = 0
    bridge.CanCollide = true
    -- Pour la boucle qui compte à rebours depuis timerDuration
    for count = timerDuration, 0, -1 do
    timerText.Text = count
    task.wait(1)
    end
    -- Faire en sorte que le pont ne soit pas marchable
    bridge.Transparency = 0.8
    bridge.CanCollide = false
    end
  5. La dernière chose à faire pour réinitialiser le pont est de changer le timerText en une chaîne vide comme à l'origine. Puis, définissez le timerActive bool à false.


    bridge.Transparency = 0.8
    bridge.CanCollide = false
    timerText.Text = ""
    timerActive = false
  6. Testez et vérifiez pour vous assurer que le pont peut être utilisé plusieurs fois.

Terminez le script de pont ponté


local bridge = script.Parent
-- Obtient le bouton comme il est écrit dans l'Explorer
local button = workspace.ButtonBridge
-- Obtient la partie pour l'affichage
local timerPart = workspace.TimerDisplay
-- Obtient le texte qui affichera le minuteur
local timerText = timerPart.SurfaceGui.TextLabel
-- Combien de temps les joueurs doivent-ils traverser le pont
local timerDuration = 5
local timerActive = false
local function startTimer()
print("Countdown started")
timerActive = true
bridge.Transparency = 0
bridge.CanCollide = true
-- Pour la boucle qui compte à rebours depuis timerDuration
for count = timerDuration, 0, -1 do
timerText.Text = count
task.wait(1)
end
-- Faire en sorte que le pont ne soit pas marchable
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)

Résumé

Les boucles peuvent être combinées avec différents moyens d'interaction pour créer des moments de jeu amusants. Dans ce tutoriel, un pont temporaire est créé en utilisant un for loop qui fonctionne comme un compte à rebours. Pendant le compte à rebours, les joueurs sont donnés un temps limité pour traverser.