Práctica de Else/if con otorgamiento de puntos

*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 utilizará declaraciones condicionales para crear una parte que otorgue o reste puntos en un tablero de clasificación dependiendo del color de la parte al ser tocada. Si es azul, entonces otorgará unos pocos puntos. Si es verde, otorgará muchos puntos. Finalmente, si es rojo, restará puntos.

Configura el proyecto

La parte que otorga puntos se puede agregar a cualquier proyecto donde los puntos sean relevantes. Por ejemplo, un juego de aventura donde los jugadores recojan puntos.

Seguimiento de puntos

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

  1. Crea un nuevo script en ServerScriptService llamado Leaderboard. Copia y pega el siguiente código en el script.


    --En ServerScriptService, crea un script llamado PlayerSetup con el contenido 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 IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Ejecuta onPlayerJoin cuando el evento PlayerAdded se activa
    Players.PlayerAdded:Connect(onPlayerJoin)

Parte que cambia de color

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

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

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


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

    • Azul (Algunos puntos): (0, 0, 255)
    • Verde (Muchos puntos): (0, 255, 0)
    • Rojo (Perder 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. Agrega variables para una pequeña cantidad de puntos, una cantidad mayor de puntos y una tercera para restar 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, necesitarás acceder a la información del jugador que está almacenada en el Explorador bajo Jugadores, y que es separada del objeto del personaje. Aquí es donde se pueden encontrar estadísticas del tablero de clasificación.

Puedes hacerlo añadiendo el servicio Players a tu script. Los Servicios son conjuntos adicionales de funciones preconstruidas realizadas por ingenieros de Roblox para ahorrarte tiempo.

  1. Obtén el servicio Players 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 otorgará y restará puntos. La segunda función verificará si un jugador ha tocado la parte. Estas funciones se conectarán luego a un evento de toque, que se ejecuta cada vez que se toca esa parte.

  1. Crea una nueva función llamada givePoints() y un parámetro llamado player. Dentro, agrega una declaración print para usarla con propósitos de prueba.


    local Players = game:GetService("Players")
    -- Otorga o resta puntos
    local function givePoints(player)
    print("Otorgando puntos al jugador")
    end
  2. Debajo de eso, crea una segunda función llamada partTouched() con un parámetro llamado otherPart.


    -- Otorga o resta puntos
    local function givePoints(player)
    print("Otorgando puntos al jugador")
    end
    -- Verifica si el jugador tocó la parte
    local function partTouched(otherPart)
    end
  3. Dentro de la función, usa la función GetPlayerFromCharacter() para verificar si hay un jugador en la variable otherPart.


    -- Verifica si el jugador tocó la parte
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Si un jugador tocó la parte, se almacenará en la variable player. Si no, la variable permanecerá vacía. Por tu cuenta:

    • Dentro de la función, verifica si player tiene un valor. Si lo hay, entonces llama a givePoints(player).
    • Debajo de la función, conecta partTouched() al evento Touched de pointPart.

    -- Verifica 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. Ejecuta el proyecto. Cada vez que un jugador toque la parte, deberías ver un mensaje en la ventana de salida que dice: "Otorgando puntos al jugador"

Consejos de solución de problemas:

  • Verifica que "Players" en game:GetService("Players") esté en mayúsculas y entre comillas.
  • partTouched() debe estar conectado al evento Touched de pointPart.

Crea colores en bucle

Para cambiar de colores, el script utilizará un bucle while que cambia el color de la parte cada pocos segundos. La condición para este bucle será verdadera, por lo que podrá ejecutarse indefinidamente.

  1. Al final del script, crea un nuevo bucle while donde la condición es verdadera, lo que significa que el bucle siempre se ejecuta.


    -- Verifica 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)
    -- Bucles a través de colores
    while true do
    end
  2. Por tu cuenta, codifica un bucle while verdadero que cambie pointPart a las variables de color que has creado. No olvides usar task.wait() entre colores. Cuando termines, revisa tu código con respecto a la versión a continuación.


    -- Bucles 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. Prueba y verifica que los tres colores cambien en un bucle sin detenerse.

Consejos de solución de problemas

A este punto, si el bucle de colores no funciona como se esperaba, prueba una de las siguientes opciones a continuación.

  • Verifica que el bucle while esté en la parte inferior del script, debajo del evento Touched. Si el bucle no está en la parte inferior, evitará que otras partes del script se ejecuten correctamente.
  • Verifica 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).

Otorgar puntos a los jugadores

A los jugadores se les otorgarán puntos según el color actual de la parte cuando la toquen.

Encuentra el color actual

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

  1. Encuentra givePoints(). Reemplaza tu mensaje de prueba con una variable para el color actual de pointPart. Esta variable determinará cuántos puntos recibe (o pierde) el jugador.


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Para afectar los puntos de un jugador, esa función necesita acceso al tablero de estadísticas del jugador. Crea una variable para almacenarlo.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Ahora agrega una variable para obtener el valor de Puntos del jugador, que es un hijo de su tablero de estadísticas.


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

Otorgar o restar puntos

A continuación, utilizarás if y elseif para otorgar o restar puntos dependiendo del color de la parte al ser tocada. Recuerda que el azul proporciona una pequeña cantidad, el verde proporciona muchos y el rojo resta puntos.

  1. Dentro de givePoints(), debajo de las variables, usa una declaración if para verificar si el color actual es azul y si es así, entonces suma smallPoints al valor actual de 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, agrega una condición else if. Si es verde, entonces suma la variable largePoints a los puntos del jugador.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Usa una declaración else para restar puntos si pointsPart no fue ni azul ni 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 otorgando puntos.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Prueba el juego y verifica que cada color otorgue puntos como se esperaba. Asegúrate de probar las tres condiciones.

Dar retroalimentación a los jugadores

PointPart funciona, pero los jugadores podrían no notar que algo sucedió a menos que estén mirando su tablero de clasificación. Corrige eso creando partículas cuando se destruya PointPart.

Agregar retroalimentación cuando los jugadores utilizan una parte, como sonidos, temblores o partículas, hace que las interacciones con los objetos sean más satisfactorias para los jugadores.

Crear un efecto de partículas

El efecto de partículas será del mismo color que la parte al ser tocada. Dado que los colores se almacenaron en variables, es fácil reutilizarlos.

  1. En givePoints() al final, crea una nueva instancia de ParticleEmitter. Asegúrate de que el nombre de la instancia esté escrito exactamente como se muestra.


    local particle = Instance.new("ParticleEmitter")
    end
  2. Los ParticleEmitters utilizan secuencias de color para controlar su propiedad Color. Crea una nueva ColorSequence y pasa el color actual de la parte.


    -- Destruye la parte
    pointPart:Destroy()
    -- Crea partículas
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. La partícula necesitará ser anexada al jugador que la tocó. Crea una variable para obtener el modelo del personaje del jugador. Luego, anexar la partícula a la cabeza del jugador.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Utiliza task.wait() por un segundo rápido, y 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. Prueba el juego y asegúrate de que las partículas sigan brevemente al jugador después de tocar cada color.

Consejos de solución de problemas

A este punto, si las partículas no funcionan como se esperaban, prueba una de las siguientes opciones a continuación.

  • Asegúrate de que al crear una nueva instancia, ParticleEmitter esté escrito exactamente como se muestra y dentro de comillas.
  • Al anexar las partículas, asegúrate de usar : entre playerCharacter y WaitForChild() sin espacios entre ellos.

Script completo de PointScript

Una versión terminada del script puede ser referenciada a continuación.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Otorga algunos puntos
local blue = Color3.fromRGB(0, 0, 255)
-- Otorga más puntos
local green = Color3.fromRGB(0, 255, 0)
-- Hace que los jugadores pierdan puntos
local red = Color3.fromRGB(255, 0, 0)
-- puntos otorgados 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 puntos al jugador según el 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 brillante 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 variables. Necesita estar al final del script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end
©2026 Roblox Corporation. Roblox, el logotipo de Roblox y "Powering Imagination" son algunas de nuestras marcas registradas y no registradas en los Estados Unidos y otros países.