Introducción a los arrays

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

Estructuras de datos son cómo los creadores almacenan y organizan conjuntos enteros de datos. En Lua, las estructuras de datos se crean con tablas. Las tablas pueden contener cualquier número de valores.

Este artículo cubre el uso de arrays , un introducirde tabla específico, para crear un personaje que habla.

Tablas

Las tablas son tipos de datos que pueden contener múltiples valores. Sin embargo, a diferencia de otros tipos de datos que almacenan un solo valor, las tablas no tienen un tamaño fijo y pueden contener un mix de diferentes tipos de valores. Con las tablas, puede almacenar elementos en el inventario de un jugador o crear una lista de miles de nombres de jugadores.

Matrices

Hay diferentes tipos de tablas. Un tipo es un array , que almacena listas de valores en un orden específico. Para crear un matriz/lista, crea una variable y asigna un curly brackets { } . Separate los valores dentro de los brackets con comas como a continuación:

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

Crear un personaje de hablar

Para explorar mat阵, trabajarás con un personaje no jugable (PNJ) que, cuando se hace clic, muestra una línea de diálogo diferente.

Este proyecto usará un aplicación de modeladode NPC pre-hecho, que incluye un script parcial y un detector de diálogos, pero carece de diálogo.

  1. Descargue el modelo PNJ.

  2. En Explorer, importa al NPC haciendo clic derecho en Espacio de Trabajo > Descargar desde el archivo y seleccionando el archivo descargado.

Estos pasos usan un array para almacenar diferentes frases para que los jugadores las digan cuando interactúen con él.

  1. En el Explorador , ve a NPC > ProximityPrompt > ChatManager.

  2. En ChatManager, donde se indica en el script, crea un arrayo vacío para almacenar opciones de diálogo.


    -- Ciclos a través del diálogo de chat cuando se usa el mensaje
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Añadir matriz aquí
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. Dentro de los brackets {} de la matriz recién creada, escriba al menos tres строк de diálogo, separados por comas.


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

Usando índices de matriz

Cada valor en el array se asigna un número de index . Los índices se asignan a los valores en el orden en que se almacenan. El primer valor está en el índice 1, el segundo en el índice 2 y así sucesivamente.

Algunos lenguajes de programación, como Java, comienzan los índices en 0.

En el array recién creado, "Hi" está en el índice 1 y "Goodbye!" está en el índice 3.

ÍndiceValor
1Hola
2¡Hoy es un gran día!
3¡Bueno, adiós!

Usando valores de índice específicos

Usa valores de índice para asignar piezas de diálogo específicas al PNJ. Para usar un valor en un índice específico, agrégalo en cursiva después del nombre del matriz/lista, como dialogueArray[1] .

  1. Reemplazar el valor de la cadena predeterminada de la variable dialogue con el índice 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Prueba y haz clic en el PNJ. El segundo valor de arreglo debería aparecer en la burbuja de chat. Intenta cambiar el código para probar cada valor en la tabla.

Cuando el jugador interactúa con el PNJ, el NPC siempre dirá la misma línea. Eso es aburrido. En cambio, usa una variable para actualizar qué valor de índice usar.

Cada vez que un jugador interactúa con el PNJ, incrementa el valor de la variable en 1 para mostrar la siguiente línea de diálogo.

  1. Para seguir el índice actual, agregue una nueva variable llamada dialogueIndex . Establezca la variable a 1 para comenzar en el comienzo del matriz/lista.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. En speak() , reemplazar el número de índice en dialogueArray[2]] con la variable que acabas de crear.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. En la parte inferior de la función, agregue 1 a dialogueIndex . La próxima vez que se llame speak() , el diálogo mostrará la siguiente cadena.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Pruebe y haga clic en el NPC para ver cada cadena de diálogo de la matriz/lista.

Notice there's an error in the Output Window once the script reaches the end of the matriz/lista.

Lo arreglaremos en la siguiente sección para que el diálogo se reinicie desde el principio después de mostrar la última cadena.

Tamaños de matriz

Puede usar el tamaño del array para saber cuándo restablecer el índice deseado a 1. Encuentra el tamaño size de un array escribiendo # , sin espacios, antes del nombre de un matriz/lista.

Por ejemplo: #dialogueArray

Compruebe el tamaño del matriz/listacontra el valor actual de la variable para saber cuándo es hora de empezar de nuevo en el principio.

Usa el tamaño de la matriz para ver cuándo es el momento de volver a la primera pieza de diálogo.

  1. Agregue una declaración if y verifique si dialogueIndex coincide con #dialogueArray , el tamaño total de este matriz/lista. Si es así, entonces configure dialogueIndex para 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 no está al finalizar, aún debe agregar 1 a dialogueIndex . Mueve dialogueIndex += 1 debajo de otra declaración.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    else
    dialogueIndex += 1
    end
    end
  3. Juega y confirma que puedes ciclar a través y reiniciar el diálogo.

Resumen

Las estructuras de datos son cómo se almacenan los conjuntos de datos. Lua usa tablas para crear estructuras de datos. Los arrays son un tipo de tabla que puede contener listas ordenadas de información. Cada valor dentro del array se asigna un número de índice, que comienza con el índice 1.

Este script usó un array para crear una lista de posibles líneas de diálogo para un personaje no jugable (PNJ).

scriptcompletado

-- Ciclos a través del diálogo de chat cuando se usa el mensaje
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Añadir matriz aquí
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)

Consejos de solución de problemas

Si el personaje no pasa a través del array de diálogos, intente las siguientes soluciones de problemas.

  • Compruebe si la declaración if que dialogueIndex está restablecida de 1. En la declaración else, compruebe que dialogueIndex tiene 1 agregado a sí mismo.
  • Al obtener el tamaño del matriz/lista, asegúrese de que no haya espacios después del # en #dialogueArray .

Desafíos opcionales

Prueba uno de los desafíos opcionales a continuación.

  • Código el script para que el diálogo del PNJse desplace hacia atrás a través del matriz/lista. El índice de diálogo debería comenzar en el array y restar cada vez en lugar de agregar.
  • En lugar de mostrar el diálogo en orden, tiene que el NPC mostrar una línea de diálogo aleatoria cada vez usando Random.new() . Un script de ejemplo está incluido abajo para hacer una referencia

local randomGenerator = Random.new()
-- Muestra un nuevo diálogo cada vez que se haga clic en el NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end