Otro/Si se práctica con puntos de dar

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

Este proyecto usará declaraciones condicionales para crear una parte que dará o restará puntos en una tabla de clasificación dependiendo de qué color es el parte cuando se toca. Si es azul, entonces dará a los jugadores algunos puntos. Si es verde, entonces dará muchos puntos. Finalmente, si es rojo, entonces tomará puntos.

Configurando el Proyecto

La parte que da puntos puede ser añadida a cualquier proyecto donde los puntos sean relevantes. Por instancia, un juego de aventura donde los jugadores recogen puntos.

Rastreo de puntos

Para configurar este proyecto, necesitará un tablero de clasificación para rastrear los puntos y una parte que cambia de color. El código para el tablero de clasificación se proporcionará.

  1. Crear un nuevo script en ServerScriptService nombrado Leaderboard. Copiar y pegar el código a continuación en el script.


    --En ServerScriptService, crea un script llamado PlayerSetup con los contenidos a continuación.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Ejemplo de un valor numérico
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Ejecutar enPlayerJoin cuando se activa el evento PlayerAdded
    Players.PlayerAdded:Connect(onPlayerJoin)

Parte cambia color

El script pasará por tres colores diferentes para la parte. Cada color tendrá una variable para almacenar su valor RGB, un tipo de datos que incluye un conjunto de tres números (rojo, verde, azul) que crean colores.

  1. Crea una parte llamada PointPart con un script adherido llamado PointScript.

  2. En PointScript, usa script.Parent para referirte a la parte.


    local pointPart = script.Parent
  3. Cree variables para almacenar los diferentes colores. Cada variable debe establecerse a Color3.fromRGB(), que crea un valor de color.

    • Azul (Algunos Puntos): (0, 0, 255)
    • Verde (Muchos Puntos): (0, 255, 0)
    • Rojo (Pérdida de puntos): (255, 0, 0)

    local pointPart = script.Parent
    -- Colores
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Añadir variables para una pequeña cantidad de puntos, una cantidad mayor de puntos y una tercera para eliminar puntos.


    -- Colores
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Valores de puntos
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Agregar el servicio de jugadores

Para otorgar puntos, tendrás que obtener acceso a la información del jugador que se almacena en el Explorador debajo de los jugadores, y es separada del objeto de personaje. Aquí es donde se pueden encontrar informaciónes como las estadísticas de la tabla de clasificación.

Puede hacerlo agregando el servicio Jugadores a su script. Los servicios son conjuntos adicionales de funciones pre-construidas hechas por los ingenieros de Roblox para ahorrarle tiempo.

  1. Obtener el servicio Jugadores escribiendo:

    local Players = game:GetService("Players")


    -- Valores de puntos
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Servicios necesarios
    local Players = game:GetService("Players")

Funciones y eventos

PointsScript necesitará dos funciones. La primera función dará y restará partes. La segunda función verificará si un jugador ha tocado la parte. Estas funciones se conectarán con un evento de toque, que se ejecuta siempre que se toca esa parte.

  1. Crea una nueva función llamada givePoints() y un parámetro llamado player . Adentro, agrega una declaración de impresión para usar para probar.


    local Players = game:GetService("Players")
    -- Agrega o resta puntos
    local function givePoints(player)
    print("Giving player points")
    end
  2. Bajo eso, crea una segunda función llamada partTouched() con un parámetro llamado otherPart .


    -- Agrega o resta puntos
    local function givePoints(player)
    print("Giving player points")
    end
    -- Comprueba si el jugador tocó la parte
    local function partTouched(otherPart)
    end
  3. En la función, usa la función GetPlayerFromCharacter() para checar si hay un jugador en la otra variable de parte.


    -- Comprueba si el jugador tocó la parte
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Si un jugador toca la parte, se guardará dentro de la variable del jugador. Si no, la variable seguirá estando vacía. Por su en posesión:

    • Dentro de la función, compruebe si el jugador tiene un valor. Si hay uno, luego llame a givePoints(player) .
    • Debajo de la función, conecta partTouched() al evento Touched de pointPart .

    -- Comprueba si el jugador tocó la parte
    local function partTouched(otherPart)
    -- Obtiene al jugador si uno tocó la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Correr el proyecto. Cuando un jugador toque la parte, debería ver un mensaje en la ventana de salida que dice: «Giving player points» Soluciones de problemas:

  • Asegúrese de que "Players" en game:GetService("Players") esté capitalizado y en cursiva.
  • partTouched() debe conectarse al evento de puntoTouched de Touched .

Crear Colores de Loop

Para repetición a través de los colores, el script usará un tiempo = loop que cambia el color de la parte cada pocos segundos. La condición para este repetición será cierta, por lo que se puede ejecutar indefinidamente.

  1. Al finalizar el script, crea una nueva condición mientras la cosa es cierta, lo que significa que la cosa siempre se ejecuta.


    -- Comprueba si el jugador tocó la parte
    local function partTouched(otherPart)
    -- Obtiene al jugador si uno tocó la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Ciclos a través de los colores
    while true do
    end
  2. Por su en posesión, códalo por un tiempo para que cambie el punto de partida a las variables de color que has creado. No olvides usar task.wait() entre colores. Cuando termines, comprueba tu código contra la versión a continuación.


    -- Ciclos a través de 3 colores, esperando entre cada color
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Juega-prueba y comprueba que todos los tres colores se repitan sin parar.

Consejos de solución de problemas

En este punto, si el color no se repite como se esperaba, intente uno de los siguientes a continuación.

  • Asegúrese de que la ronda de mientras esté en la parte inferior del script, debajo del evento Touched. Si la ronda no está en la parte inferior, mantendrá otras partes del script funcionando correctamente.
  • Asegúrese de que cada color dentro de Color3.fromRGB() está escrito correctamente. Debe haber tres números entre 0 y 255 separados por comas, como (255, 50, 0) .

Darle Puntos a los Jugadores

Los jugadores se darán puntos según el color actual de la parte cuando la tocan.

Encuentra el color actual

Cada vez que un jugador toque la parte, el script necesitará saber el color actual de la parte para otorgar puntos más tarde.

  1. Encuentra givePoints() . Reemplaza tu mensaje de prueba con una variable para el color actual de puntoPart. Esta variable determinará la cantidad de puntos que el jugador obtiene (o pierde).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Para afectar los puntos de un jugador, esa función necesita acceso a la tabla de clasificación del jugador. Cree una variable para almacenarla.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Ahora agregue una variable para obtener el valor de los puntos del jugador, que es un hijo de su tabla de clasificación.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

Dar o Quitar Puntos

A continuación, usarás if y elif para dar o restar puntos dependiendo del color de la parte cuando se toca. Recuerda que azul proporciona una pequeña cantidad, verde proporciona muchos y rojo resta puntos.

  1. Dentro de givePoints() , debajo de las variables, usa una declaración if para ver si el color actual es azul y, si es así, añade smallPoints al valor de los puntos del jugador.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Para verificar si es verde, agregue otra condición. Si es verde, luego agregue la variable largePoints al punto del jugador.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Usa otra declaración para restar puntos si puntosPart no era azul o verde.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Por último, destruye la parte después de la declaración if para que el script no pueda seguir dando puntos.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Pruebe y verifique que cada color dé los puntos esperados. Asegúrese de probar todas las condiciones tres .

Darle a los jugadores retroalimentación

El PointPart funciona, pero los jugadores podrían no notar que algo sucedió a menos que tengan la oportunidad de mirar su tabla de clasificación. Arregla eso creando partículas cuando el PointPart se destruya.

Añadir comentarios cuando los jugadores usan una parte, como sonidos, temblor o partículas, hace que las interacciones con los objetos sean más satisfactorias para los jugadores.

Creando un Efecto de Partículas

El efecto de partículas será el mismo color que la parte cuando se toca. Ya que los colores se almacenaron en variables, es fácil de reutilizarlos.

  1. En givePoints() en la parte inferior, crea una nueva instancia de ParticleEmitter . Asegúrese de que el nombre de la instancia se escriba exactamente como se muestra.


    local particle = Instance.new("ParticleEmitter")
    end
  2. Los emisores de partículas usan secuencias de color para controlar su propiedad de color. Crear una nueva secuencia de color y pasar en el color actual del emisor.


    -- Destruir parte
    pointPart:Destroy()
    -- Crear partículas
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. La partícula necesitará ser padre para el jugador que la tocó. Crear una variable para obtener el aplicación de modeladode Personaje del jugador. Luego, padre la partícula para la cabeza del jugador.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Usa task.wait() por un segundo, luego destruye las partículas.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. Pruebe el juego y asegúrese de que las partículas brevemente sigan al jugador después de tocar cada color.

Consejos de solución de problemas

En este punto, si las partículas no funcionan como se esperaba, intente una de las siguientes opciones a continuación.

  • Haz cuando crees una nueva instancia que ParticleEmitter se escriba exactamente como se muestra y dentro de las citas.
  • Al padre las partículas, asegúrese de usar : entre playerCharacter y WaitForChild() con no espacios entre.

Completa el script

Una versión terminada del script se puede referir a continuación.


local pointPart = script.Parent
--almacenamiento local = juego:GetService("ServerStorage")
-- Da algunos puntos
local blue = Color3.fromRGB(0, 0, 255)
-- Da más puntos
local green = Color3.fromRGB(0, 255, 0)
-- Hace que los jugadores pierdan puntos
local red = Color3.fromRGB(255, 0, 0)
-- oro dado a los jugadores
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Otorga oro al jugador en función del color de la parte
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Destruye la parte, espera un segundo y luego destruye la partícula
pointPart:Destroy()
-- Crea un efecto de destellos y lo destruye
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Cambia el color de la parte según las variables. Necesita estar en la parte inferior del script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end