Altro/Se pratica con i punti di concessione

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Questo progetto userà le dichiarazioni condizionali per creare una parte che darà o sottrarà punti a una classifica a seconda del colore della parte quando toccata. Se blu, allora darà ai giocatori alcuni punti. Se verde, allora darà un sacco di punti. Infine, se rosso, allora prenderà via punti.

Configurazione del progetto

Il punto che fornisce parte può essere aggiunto a qualsiasi progetto in cui i punti sono rilevanti. Ad esempio, un gioco avventuriero in cui i giocatori raccolgono punti.

Tracciamento dei punti

Per configurare questo progetto, avrai bisogno di una classifica per tracciare i punti e una parte che cambia colore. Il codice per la classifica sarà fornito.

  1. Crea uno script nuovo in ServerScriptService chiamato Leaderboard. Copia e pasta il codice seguente nello script.


    --In ServerScriptService, crea uno script chiamato PlayerSetup con i contenuti seguenti.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Esempio di un IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Esegui onPlayerJoin quando si attiva l'evento PlayerAdded
    Players.PlayerAdded:Connect(onPlayerJoin)

Parte che cambia colore

Lo script attraverserà tre colori diversi per la parte. Ogni colore avrà un valore RGB variabile, un tipo di dati che include un insieme di tre numeri (rosso, verde, blu) che creano colori.

  1. Crea una parte chiamata PointPart con uno script allegato chiamato PointScript.

  2. In PointScript, usa script.Parent per fare riferimento alla parte.


    local pointPart = script.Parent
  3. Crea variabili per memorizzare i colori diversi. Ogni variabile dovrebbe essere impostato su Color3.fromRGB() , che crea un valore di colore.

    • Blu (Alcuni punti): (0, 0, 255)
    • Verde (Molti Punti): (0, 255, 0)
    • Rosso (Perdere Punti): (255, 0, 0)

    local pointPart = script.Parent
    -- Colori
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Aggiungi variabili per un piccolo numero di punti, un maggiore numero di punti e un terzo per rimuovere i punti.


    -- Colori
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Valori dei punti
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Aggiungere il servizio dei giocatori

Per assegnare punti, dovrai ottenere l'accesso alle informazioni del Giocatoreche è archiviato nell'Explorer sotto Players, e è separato dal personaggio oggetto. Questo è dove informazioni come le statistiche di classifica possono essere trovate.

Puoi farlo aggiungendo il servizio Giocatori al tuo script. I Servizi sono set aggiuntivi di funzioni pre-costruite fatte dagli ingegneri Roblox per risparmiare tempo.

  1. Ottieni il servizio Giocatori digitando:

    local Players = game:GetService("Players")


    -- Valori dei punti
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Servizi richiesti
    local Players = game:GetService("Players")

Funzioni e eventi

PointsScript avrà due funzioni. La prima funzione darà e sottrarà parti. La seconda funzione verrà poi connessa con un evento di tocco, che viene eseguito ogni volta che viene toccata quella parte. Queste funzioni saranno poi connesse a un evento di tocco, che viene eseguito ogni volta che viene toccata quella parte.

  1. Crea una nuova funzione chiamata givePoints() e un parametro chiamato player . Dentro, aggiungi una dichiarazione di stampa da utilizzare per il test.


    local Players = game:GetService("Players")
    -- Aggiunge o sottrae punti
    local function givePoints(player)
    print("Giving player points")
    end
  2. Sotto quello, crea una seconda funzione chiamata partTouched() con un parametro chiamato otherPart .


    -- Aggiunge o sottrae punti
    local function givePoints(player)
    print("Giving player points")
    end
    -- Controlla se il giocatore ha toccato la parte
    local function partTouched(otherPart)
    end
  3. Dentro la funzione, usa la funzione GetPlayerFromCharacter() per controllare se c'è un giocatore nella variabile altra parte.


    -- Controlla se il giocatore ha toccato la parte
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Se un giocatore tocca la parte, verrà memorizzato all'interno della variabile del giocatore. Se non è così, la variabile rimarrà vuota. Da Proprio:

    • All'interno della funzione, controlla se il giocatore ha un valore. Se c'è, allora chiama givePoints(player) .
    • Sotto la funzione, connect partTouched() all'evento Touched of pointPart .

    -- Controlla se il giocatore ha toccato la parte
    local function partTouched(otherPart)
    -- Ottiene il giocatore se uno tocca la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Esegui il progetto. Ogni volta che un giocatore tocca la parte, dovresti vedere un messaggio nella finestra di uscita che dice: "Giving player points" Risolvere i problemi::

  • Controlla che "Players" in game:GetService("Players") sia capitalizzato e in quotazioni.
  • partTouched() dovrebbe essere connesso all'evento Touched di pointPart.

Crea colori a looping

Per loop attraverso i colori, lo script userà un while = loop che cambia il colore della parte ogni pochi secondi. La condizione per questo loop sarà vera, quindi può essere eseguito indefinitamente.

  1. Alla fine dello script, crea un nuovo while loop in cui la condizione è vera, il che significa che il loop si esegue sempre.


    -- Controlla se il giocatore ha toccato la parte
    local function partTouched(otherPart)
    -- Ottiene il giocatore se uno tocca la parte
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Loop attraverso i colori
    while true do
    end
  2. Da Proprio, codifica un po 'vero do loop che cambia pointPart al colore delle variabili che hai creato. Non dimenticare di utilizzare task.wait() tra i colori. Quando hai finito, controlla il tuo codice contro la versione sottostante.


    -- Loop attraverso 3 colori, aspettando tra un colore e l'altro
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Prova e controlla che tutti e tre i colori si ripetano senza fermarsi.

Risolvere i problemi

A questo punto, se il looping dei colori non funziona come previsto, prova uno dei seguenti metodi.

  • Assicurati che il while loop sia alla base dello script, sotto l'evento Touched . Se il while non è alla base, non eseguirà le altre parti dello script correttamente.
  • Assicurati che ogni colore all'interno di Color3.fromRGB() sia correttamente scritto. Ci devono essere tre numeri tra 0 e 255 separati da virgole, come (255, 50, 0) .

Dare ai giocatori i punti

I giocatori riceveranno punti in base al colore attuale della parte quando la toccheranno.

Trovare il colore corrente

Ogni volta che un giocatore tocca la parte, lo script dovrà conoscere il colore corrente della parte per assegnare i punti in seguito.

  1. Trova givePoints() . Sostituisci il tuo messaggio di test con una variabile per il colore corrente di pointPart. Questa variabile determinerà il numero di punti che il giocatore ottiene (o perde).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Per influenzare i punti di un Giocatore, quella funzione ha bisogno dell'accesso alla Classificadel Giocatore. Crea una variabile per memorizzarlo.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Ora aggiungi una variabile per ottenere il valore dei punti del Giocatore, che è un figlio della loro Classifica.


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

Dare o Sottrarre Punti

Successivamente, userai if e elif per dare o sottrarre punti a seconda del colore della parte quando toccata. Ricorda che il blu fornisce una piccola quantità, il verde fornisce molti e il rosso sottrae punti.

  1. Dentro givePoints() , sotto le variabili, usa un if statement to check if the current color is blue and if so then add smallPoints al valore dei punti del Giocatore.


    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. Per controllare per verde, aggiungi un altro se la condizione. Se verde, quindi aggiungi la variabile largePoints ai punti del Giocatore.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Usa un'altra dichiarazione per sottrarre i punti se pointsPart non era blu né verde.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Infine, distruggi la parte dopo la dichiarazione if in modo che lo script non possa continuare a dare punti.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Prova e controlla che ogni colore dia i punti come previsto. Assicurati di testare tutte le tre condizioni.

Dare ai giocatori feedback

Il punto partenza funziona, ma i giocatori potrebbero non notare che qualcosa è successo a meno che non accadano di guardare la loro Classifica. Riparalo creando parti quando il punto partenza viene distrutto.

L'aggiunta di feedback quando i giocatori utilizzano una parte, come suoni, scuote o parti, rende le interazioni con gli oggetti più soddisfacenti per i giocatori.

Creazione di un effetto di particelle

L'effetto delle particelle sarà lo stesso colore della parte quando viene toccata. Poiché i colori sono stati memorizzati nelle variabili, è facile riutilizzarli.

  1. In givePoints() alla parte inferiore, crea una nuova esempio ParticleEmitter . Assicurati che il nome dell'istanza sia scritto esattamente come mostrato.


    local particle = Instance.new("ParticleEmitter")
    end
  2. I parteletti emittenti utilizzano sequenze di colore per controllare la loro Proprietàdi colore. Crea una nuova sequenza di colore e passa il colore corrente.


    -- Distruggi parte
    pointPart:Destroy()
    -- Crea parti
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. La particella dovrà essere parented al giocatore che l'ha toccata. Creare una variabile per ottenere il modello di Personaggio del Giocatore. Quindi, parent la parte alla testa del Giocatore.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Usa task.wait() per un secondo, quindi distruggi le parti.


    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. Prova il gioco e assicurati che le particelle seguano brevemente il giocatore dopo aver toccato ciascun colore.

Risolvere i problemi

A questo punto, se le parti non funzionano come previsto, prova uno delle seguenti opzioni a seguire.

  • Fai quando crei una nuova istanza che ParticleEmitter è scritto esattamente come mostrato e all'interno delle citazioni.
  • Quando genere le parti, assicurati di utilizzare : tra playerCharacter e WaitForChild() con nessuno spazio tra.

Completa PointScript

Una versione finita dello script può essere riferita qui sotto.


local pointPart = script.Parent
--local storage = Gioco:GetService("ServerStorage")
-- Dà alcuni punti
local blue = Color3.fromRGB(0, 0, 255)
-- Dà più punti
local green = Color3.fromRGB(0, 255, 0)
-- Fa perdere punti ai giocatori
local red = Color3.fromRGB(255, 0, 0)
-- oro dato ai giocatori
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")
-- Dà al giocatore l'oro in base al colore della parte
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Distruggi la parte, aspetta un secondo e poi distruggi la particella
pointPart:Destroy()
-- Crea un effetto scintillante e lo distrugge
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 il colore della parte in base alle variabili. Deve essere in fondo dello script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end