Introducción a 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í.

Las estructuras de datos son la forma en que los codificadores 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 matrices **** , un introducirde tabla específico, para crear un personaje que hable.

Mesas

Las tablas son tipos de datos que pueden contener múltiples valores. A diferencia de otros tipos de datos que almacenan un solo valor, las tablas no tienen un tamaño fijo y pueden contener una mezcla 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 brackets curly { } . Separa los valores dentro de los brackets con comas como a continuación:

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

Creando un Personaje que Habla

Para explorar matrices, trabajarás con un personaje no jugable (PNJ) que, al hacer clic, muestra una línea de diálogo diferente.

Este proyecto usará un aplicación de modeladode NPC prefabricado, que incluye un guión parcial y un detector de indicaciones, pero carece de diálogo.

  1. Descarga la plantilla PNJ.

  2. En el Explorador, importe el NPC haciendo clic derecho en Workspace > Insert From File y seleccione el archivo descargado.

Estos pasos usan un conjunto para almacenar diferentes frases para que el NPC diga cuando los jugadores interactúan con él.

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

  2. En ChatManager, donde esté marcado en el script, cree un conjunto vacío para almacenar las opciones de diálogo.


    -- Cicla a través del diálogo de chat cuando se usa el aviso
    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 paréntesis {} del array que acabas de crear, escribe al menos tres cadenas de diálogo, separadas por comas.


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

Usando índices de matrices

A cada valor en la matriz se le asigna un número index. Los índices se asignan a los valores en el orden en que se almacenan los valores. El primer valor está en el índice 1, el segundo en el índice 2, etc.

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

En la matriz recién creada, "Hi" está en el índice 1 y "Goodbye!" está en el índice 3.

ÍndiceValor
1 vezHola
2 veces¡Hoy es un gran día!
3 veces¡Adiós!

Usando Valores de Índice Específicos

Usa valores de índice para asignar piezas específicas de diálogo al PNJ. Para usar un valor en un índice específico, añade el índice entre paréntesis directamente después del nombre de la matriz/lista, como dialogueArray[1].

  1. Reemplace el valor de cadena predeterminado 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. Reproduce y haz clic en el PNJ. El segundo valor de la matriz 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 su lugar, usa una variable para actualizar qué valor de índice usar.

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

  1. Para realizar un seguimiento del índice actual, agregue una nueva variable llamada dialogueIndex . Establece la variable en 1 para comenzar al principio de la matriz/lista.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local dialogueIndex = 1
  2. En speak() , reemplace 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, añade 1 a dialogueIndex . La próxima vez que speak() sea llamado, el diálogo mostrará la siguiente cadena.


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

Tenga en cuenta que hay un error **** en la ventana de salida una vez que el script llega al final del matriz/lista.

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

Tamaños de matrices

Puede usar el tamaño de la matriz para saber cuándo restablecer el índice deseado a 1. Encuentre el tamaño **** de una matriz escribiendo # , sin espacios, antes del nombre de una matriz/lista.

Por ejemplo: #dialogueArray

Comprueba el tamaño de la matriz/listaen comparación con el valor actual de la variable para saber cuándo es el momento de comenzar de nuevo desde el principio.

Usa el tamaño de la matriz para comprobar cuándo es el momento de volver al primer diálogo.

  1. Añade una sentencia if y comprueba si dialogueIndex es igual a #dialogueArray, el tamaño total de esta matriz/lista. Si es así, pon dialogueIndex en 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, todavía debe agregar 1 a dialogueIndex . Mueva dialogueIndex += 1 bajo una sentencia else.


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

Resumen

Las estructuras de datos son la forma en que se almacenan los conjuntos de datos. Lua usa tablas para crear estructuras de datos. Las matrices son un tipo de tabla que puede contener listas ordenadas de información. A cada valor dentro de la matriz se le asigna un número de índice, comenzando con el índice 1.

Este script utilizó un array para crear una lista de posibles líneas de diálogo para un Personaje No Reproducible (PNJ).

scriptCompletado

-- Cicla a través del diálogo de chat cuando se usa el aviso
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 para solucionar problemas

Si el personaje no pasa por el conjunto de diálogos, prueba los siguientes consejos de solución de problemas.

  • Comprueba en la sentencia if que dialogueIndex está establecido como 1. En la sentencia else, comprueba que dialogueIndex tenga 1 añadido a sí mismo.
  • Al obtener el tamaño de la 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.

  • Codifica el script para que el diálogo del PNJvaya hacia atrás a través del matriz/lista. El dialogueIndex debe comenzar en el array y restar cada vez en lugar de agregar.
  • En lugar de mostrar el diálogo en orden, haz que el NPC muestre una línea aleatoria de diálogo cada vez que use Random.new() . Un ejemplo de script se incluye a continuación para referencia

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