Introduction aux tableaux

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

Les structures de données sont la façon dont les développeurs stockent et organisent des ensembles de données entiers. Dans Lua, les structures de données sont créées avec des tables. Les tables peuvent contenir n'importe quel nombre de valeurs.

Cet article couvre l'utilisation de tableaux , un taperde table spécifique, pour créer un personnage parlant.

Tables

Les tables sont des types de données qui peuvent contenir plusieurs valeurs. Contrairement aux autres types de données qui stockent une seule valeur, les tables n'ont pas de taille fixe et peuvent contenir un mélange de différents types de valeurs. Avec les tables, vous pouvez stocker des articles dans l'inventaire d'un joueur ou créer une liste de milliers de noms de joueur.

tableaux

Il existe différents types de tables. Un type est un tableau, qui stocke les listes de valeurs dans un ordre spécifique. Pour créer un matrice, créez une variable et attribuez-lui des crochets curly brackets { } . Séparez les valeurs dans les crochets avec des virgules comme ci-dessous :

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

Créer un personnage parlant

Pour explorer les tableaux, vous travaillerez avec un personnage non jouable (PNJ) qui, lorsqu'il est cliqué, affiche une autre ligne de dialogue.

Ce projet utilisera un modèlisationde NPC prédéfini, qui inclut un script partiel et un détecteur de提示, mais manque de dialogue.

  1. Téléchargez le modèle PNJ.

  2. Dans Explorer, importez le NPC en faisant un clic droit sur Espace de travail > Télécharger le fichier et sélectionnez le fichier téléchargé.

Codage d'un tableau de dialogue

Ces étapes utilisent un tableau pour stocker différentes phrases pour que le PNJ dise quand les joueurs interagissent avec lui.

  1. Dans l' Explorateur, allez à NPC > ProximityPrompt > ChatManager.

  2. Dans ChatManager, où marqué dans le script, créez un tableau vide pour stocker les options de dialogue.


    -- Cycle through chat dialogue when prompt is used
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Ajouter un tableau ici
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. Dans les parenthèses {} de l'arrêt créé, saisissez au moins trois lignes de dialogue, séparées par des virgules.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

Utiliser les index de tableau

Chaque valeur dans le tableau est attribuée un nombre index . Les indexes sont attribués aux valeurs dans l'ordre dans lequel les valeurs sont stockées. Le premier valeur est à l'index 1, le deuxième à l'index 2 et ainsi de suite.

Certains langages de programmation, comme le Java, commencent les index à 0.

Dans l' array vient de créer, "Hi" est à l' index 1 et "Goodbye!" est à l' index 3.

IndexValeur
1Salut
2Aujourd'hui, c'est un jour merveilleux !
3Au revoir !

Utiliser les valeurs d'index spécifiques

Utilisez les valeurs d'index pour attribuer des pièces de dialogue spécifiques à l'PNJ. Pour utiliser une valeur à un index spécifique, ajoutez l'index en majuscules directement après le nom de l'matrice, comme dialogueArray[1] .

  1. Remplacez la valeur de chaîne par défaut de la variable dialogue avec l'index 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Testez le jeu et cliquez sur le PNJ. La deuxième valeur de l'arrêt devrait apparaître dans la bulle de chat. Essayez de modifier le code pour tester chacune des valeurs dans la table.

Changer les lignes de dialogue

Lorsque le joueur interagit avec le PNJ, le NPC dira toujours la même ligne. C'est ennuyeux. Au lieu de cela, utilisez une variable pour mettre à jour laquelle est la valeur d'index à utiliser.

Chaque fois qu'un joueur interagit avec le PNJ, augmentez la valeur de variable de 1 pour afficher la prochaine ligne de dialogue.

  1. Pour suivre l'index actuel, ajoutez une nouvelle variable nommée dialogueIndex . Set the variable to 1 to start at the beginning of the matrice.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. En speak() , remplacer le numéro d'index dans dialogueArray[2] avec la variable que vous venez de créer.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Au bas de la fonction, ajoutez 1 à dialogueIndex. La prochaine fois que speak() est appelé, le dialogue affichera la prochaine chaîne.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Testez le jeu et cliquez sur le PNJ pour voir chaque chaîne de dialogue de l'matrice.

Remarquez qu'il y a une erreur erreur dans la fenêtre de sortie une fois que le script atteint la fin de l'matrice.

Vous le ferez dans la prochaine section afin que le dialogue se redémarre du début après qu'il ait affiché la dernière chaîne.

Tailles d'阵

Vous pouvez utiliser la taille de l' array pour savoir quand réinitialiser l' index souhaité à 1. Trouvez la taille taille d'un tableau en tapant # , sans espaces, avant le nom d' un matrice.

Par exemple : #dialogueArray

Vérifiez la taille de l'matricecontre la valeur actuelle de la variable pour savoir quand il est temps de recommencer au début.

Redémarrage du dialogue

Utilisez la taille de l'arrêt pour vérifier quand il est temps de revenir à la première pièce de dialogue.

  1. Ajoutez une if statement et vérifiez si dialogueIndex correspond à #dialogueArray, la taille totale de cet matrice. Si oui, alors définissez dialogueIndex à 1.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Si dialogueIndex n'est pas à la terminer, il devrait toujours ajouter 1 à dialogueIndex. Déplacez dialogueIndex += 1 sous une autre déclaration.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. Jouez et confirmez que vous pouvez cyclez à travers et redémarrer le dialogue.

Résumé

Les structures de données sont la façon dont les ensembles de données sont stockés. Lua utilise des tableaux pour créer des structures de données. Les tableaux sont un type de table qui peut contenir des listes ordonnées d'informations. Chaque valeur dans le tableau est attribuée un numéro d'index, commençant par l'index 1.

Ce script a utilisé un tableau pour créer une liste de lignes de dialogue possibles pour un personnage non jouable (PNJ).

Script script

-- Cycle through chat dialogue when prompt is used
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Ajouter un tableau ici
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)

Conseils de débogage

Si le personnage ne passe pas à travers l' array de dialogue, essayez les astuces de débogage suivantes.

  • Vérifiez si la déclaration if que dialogueIndex est réinitialisée à 1. Dans la déclaration else, vérifiez que dialogueIndex a 1 ajouté à lui-même.
  • Lors de la récupération de la taille de l'matrice, assurez-vous qu'il n'y a pas d'espace après le # dans #dialogueArray .

Défis facultatifs

Essayez l'un des défis facultatifs ci-dessous.

  • Codez le script pour que le dialogue du PNJ se déclenche à travers l' matrice. Le dialogueIndex doit commencer à l' array et soustraire à chaque fois au lieu d'ajouter.
  • Au lieu de montrer le dialogue dans l'ordre, faites le NPC montrer une ligne de dialogue aléatoire à chaque fois en utilisant Random.new() . Un script d'exemple est inclus ci-dessous pour référencer

local randomGenerator = Random.new()
-- Affiche une nouvelle boîte de dialogue chaque fois que le PNJ est cliqué
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end